【发布时间】:2017-07-21 14:22:05
【问题描述】:
我正在使用PageObject 模式,它将HTML 细节从测试的顶层抽象出来。我正在使用SitePrism gem 执行此操作。
在我的示例中,我有一个主页 (HomePage.rb):
class HomePage < SitePrism::Page
set_url ENV['BASE_URL']
section :header, HeaderSection, "div[class='headerSection']"
指的是一个共同的页面部分,HeaderSection(HeaderSection.rb):
class HeaderSection < SitePrism::Section
element :sign_in_button, "a[class='signIn']"
以及我的测试的步骤定义(login.rb):
And(/^I am not logged in/) do
@home_page = HomePage.new # actually, this is specified in env.rb
expect(@home_page.header).to have_sign_in_button
end
我不想将 web 元素暴露给步骤定义,而是将其封装在 HomePage 的类方法中。似乎最好的方法是将断言放入 HomePage 本身的类方法中(HomePage.rb):
def amILoggedIn
expect(header).to have_sign_in_button
end
以上假设我也在使用include RSpec::Matchers。
我的方法将是唯一暴露给步骤定义的东西(login.rb):
And(/^I am not logged in/) do
@home_page.amILoggedIn
end
作为 SitePrism 的一部分,sign_in_button 元素有自己的内置方法来检查其是否存在,即:
header.has_sign_in_button?
问题
就最佳实践而言,这是在amILoggedIn 方法中编写此断言的最推荐方式(即使看起来它们都使用相同的指令),
expect(header).to have_sign_in_button
或
header.has_sign_in_button?
【问题讨论】:
-
我已经删除了主要基于意见的问题(但在我看来,是的,这是一个很好的使用模式。
标签: ruby rspec capybara site-prism