在 Ruby 中支持页面对象模式
Support for the Page Object pattern in Ruby
在 Ruby-land 我们有 Capybara 和 Webrat 在使用 Cucumber 进行功能测试期间驱动我们的网络浏览器。
我找不到像 Groovy/Java-land 中的 Geb 这样的东西,它似乎在比 Capybara 更高的抽象级别上工作。这是来自 the Geb website.
的 Geb 描述
Geb is a browser automation solution.
It brings together the power of WebDriver, the elegance of jQuery
content selection, the robustness of Page Object modelling and the
expressiveness of the Groovy language.
Capybara 已经汇集了 WebDriver(通常是 Selenium)和 jQuery 风格的内容选择。但它不支持 Page Object 想法。 (您创建 类 来表示被测试的页面,因此这些步骤会对它们执行操作,而不是一直直接查看 DOM。就像您的页面的迷你 API .)
举一个我正在寻找的有用功能的例子,我从一位同事那里了解到,Geb 可以自动断言被测页面与代表页面的虚拟页面对象中的属性相匹配黄瓜测试。
我使用了 Site Prism for page-objects in a fairly large application. Cheezy's page-object gem 是我当时考虑过的另一个 gem 但它没有使用 Capybara(如果正确使用它可以帮助解决时间问题) .页面对象 gem 有它自己的 "wait" 机制。
还有another gem,但我怀疑它被废弃了。
page-object gem 将为您提供以下几行测试代码:
class LoginPage
include PageObject
page_url "http://example.com/login"
text_field(:username, :id => 'username')
text_field(:password, :id => 'password')
button(:login, :id => 'login')
def login_with(username, password)
self.username = username
self.password = password
login
end
end
# in your tests
visit_page LoginPage do |page|
page.login_with('testuser1@example.com', 'incorrect')
page.wait_until do # using default of 30s for this asynch call
page.text.include? 'invalid user or password'
end
expect(page).to have_content 'invalid user or password'
更多例子可以在这个项目中看到:https://github.com/JonKernPA/pageobject and on the wiki https://github.com/cheezy/page-object/wiki/Elements
Site Prism 看起来像这样:
class LoginPage < SitePrism::Page
set_url '/login'
element :username_field, '#username'
element :password_field, '#password'
element :login_button, '#login'
def login_with(username, password)
username_field.set username
password_field.set password
login_button.click # this uses capybara to find('#login').click
end
end
# in your tests
@page = LoginPage.new
@page.load
@page.login_with('testuser1@example.com', 'incorrect')
# capybara automatically waits for us
expect(@page).to have_content 'invalid user or password'
Site Prism 自述文件有很多很好的例子。您需要了解的所有其他信息都在 Capybara's 出色的自述文件和文档中。
当然还有比这些小例子更多的差异。
我建议你看看两者,然后决定你的要求是什么。
在 Ruby-land 我们有 Capybara 和 Webrat 在使用 Cucumber 进行功能测试期间驱动我们的网络浏览器。
我找不到像 Groovy/Java-land 中的 Geb 这样的东西,它似乎在比 Capybara 更高的抽象级别上工作。这是来自 the Geb website.
的 Geb 描述Geb is a browser automation solution.
It brings together the power of WebDriver, the elegance of jQuery content selection, the robustness of Page Object modelling and the expressiveness of the Groovy language.
Capybara 已经汇集了 WebDriver(通常是 Selenium)和 jQuery 风格的内容选择。但它不支持 Page Object 想法。 (您创建 类 来表示被测试的页面,因此这些步骤会对它们执行操作,而不是一直直接查看 DOM。就像您的页面的迷你 API .)
举一个我正在寻找的有用功能的例子,我从一位同事那里了解到,Geb 可以自动断言被测页面与代表页面的虚拟页面对象中的属性相匹配黄瓜测试。
我使用了 Site Prism for page-objects in a fairly large application. Cheezy's page-object gem 是我当时考虑过的另一个 gem 但它没有使用 Capybara(如果正确使用它可以帮助解决时间问题) .页面对象 gem 有它自己的 "wait" 机制。
还有another gem,但我怀疑它被废弃了。
page-object gem 将为您提供以下几行测试代码:
class LoginPage
include PageObject
page_url "http://example.com/login"
text_field(:username, :id => 'username')
text_field(:password, :id => 'password')
button(:login, :id => 'login')
def login_with(username, password)
self.username = username
self.password = password
login
end
end
# in your tests
visit_page LoginPage do |page|
page.login_with('testuser1@example.com', 'incorrect')
page.wait_until do # using default of 30s for this asynch call
page.text.include? 'invalid user or password'
end
expect(page).to have_content 'invalid user or password'
更多例子可以在这个项目中看到:https://github.com/JonKernPA/pageobject and on the wiki https://github.com/cheezy/page-object/wiki/Elements
Site Prism 看起来像这样:
class LoginPage < SitePrism::Page
set_url '/login'
element :username_field, '#username'
element :password_field, '#password'
element :login_button, '#login'
def login_with(username, password)
username_field.set username
password_field.set password
login_button.click # this uses capybara to find('#login').click
end
end
# in your tests
@page = LoginPage.new
@page.load
@page.login_with('testuser1@example.com', 'incorrect')
# capybara automatically waits for us
expect(@page).to have_content 'invalid user or password'
Site Prism 自述文件有很多很好的例子。您需要了解的所有其他信息都在 Capybara's 出色的自述文件和文档中。
当然还有比这些小例子更多的差异。
我建议你看看两者,然后决定你的要求是什么。