有没有好的方法来做到这一点?
不建议您保留对当前页面的引用。
我可以演示多种保留引用的方法,但我不想这样做,因为它不是一个好的模式。
冒着将我的回答标记为未回答的风险,我将尝试解释原因。
在 Calabash 文档中使用 @current_page 的示例迫使您始终执行以下操作:
在我看来,文档不好。我一直试图让他们改变。Calabash 开发人员对这个话题达成了普遍共识,但我们都没有时间改变他们。
在步骤之间跟踪当前页面不是最佳实践。@current_page
原因是读者永远无法@current_page
通过查看它来知道它的值:它可能在后续步骤中被设置为任何值。
最佳实践是在需要时创建一个临时页面对象。
# Bad
@current_page = @current_page.login(user)
# Good
login_page = page(LoginPage).await
some_other_page = login_page.login(user)
some_other_page.await
强迫你总是做类似的事情:
是@current_page
Cucumber World 变量;它没有什么特别之处。它可能被称为: @page
或@screen
或@foobar
。@current_page
当我说没有什么特别之处时,我的意思是 Calabash在内部的任何地方都没有使用。
最好只在登录方法中设置@current_page 而不必在每次调用将您带到新页面的方法时都进行@current_page = @current_page.login(user) 分配。
有没有好的方法来做到这一点?
一般来说,在黄瓜测试或页面模型中保存状态并不是一个好主意。如果您需要某个步骤或方法中的一条信息,您应该通过查询应用程序来请求它。
当然也有例外。想象一个应用程序,其仪表板页面有一个提醒图标,带有代表未读提醒数量的徽章计数。
Scenario: Verify the reminders badge count
Given I am looking at the Dashboard
And I make a note of the reminders badge count
When I go to the reminders page
Then the reminders badge count should match the unread reminders
将徽章计数存储在 Cucumber World 变量中是合理的,以便您可以在后续步骤中使用它。
And(/^I make a note of the reminders badge count$/) do
dashboard = page(Dashboard).await
@reminder_badge_count = dashboard.reminder_badge_count
end
When(/^I go to the reminders page$/) do
dashboard = page(Dashboard).await
dashboard.navigate_to(:reminders)
end
Then(/^the reminders badge count should match the unread reminders$/) do
reminders_page = page(Reminders).await
unread_actual = reminders_page.unread_reminders
unless unread_actual == @reminder_badge_count
screenshot_and_raise("Expected badge count '#{@reminder_badge_count}' to match unread count '#{unread_actual}")
end
end