是否有一种简单的方法可以在step_definition.rb文件和PageObject.rb文件中引用@current_page?
在Calabash文档中使用@current_page的示例迫使您总是执行以下操作:
@current_page = @current_page.login(user)
在login
之后,您处于新页面,并且必须将@current_page
的引用传回给它。最好只在@current_page
方法中设置login
,而不必在每次调用将您带到新页面的方法时执行@current_page = @current_page.login(user)
分配。
这样做有好办法吗?
答案 0 :(得分:4)
有没有好办法呢?
不建议您保留对当前页面的引用。
我可以展示一些保持参考的方法,但我不想这样做,因为它不是一个好的模式。
有可能将我的回复标记为无回答,我会尝试解释原因。
在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
是黄瓜世界变量;这没什么特别的。可以称之为:@page
或@screen
或@foobar
。当我说没有什么特别之处时,我的意思是Calabash在内部任何地方都不使用@current_page
。
在login方法中设置@current_page会很高兴,而不是每次调用一个方法将@current_page = @ current_page.login(用户)分配到新页面时都这样做。
有没有好办法呢?
一般来说,在黄瓜测试或页面模型中保存状态并不是一个好主意。如果您需要步骤或方法中的一条信息,您应该通过查询应用程序来询问它。
当然有例外。想象一个带有 Dashboard 页面的应用程序,该页面带有提醒图标,其徽章数量代表未读提醒的数量。
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