在Ruby-land中,我们有Capybara和Webrat在使用Cucumber进行功能测试时驱动我们的Web浏览器。
我能找到的东西就像Groovy / Java-land中的Geb,它看起来像是在比Capybara更高的抽象层次上运行。这是来自the Geb website的Geb的描述。
Geb是一种浏览器自动化解决方案。
它汇集了WebDriver的强大功能,jQuery的优雅 内容选择,页面对象建模的稳健性和 表达Groovy语言。
Capybara已经将WebDriver(通常是Selenium)和jQuery风格的内容选择结合在了一起。但它对Page Object的想法没有任何支持。 (您创建表示要测试的页面的类,因此这些步骤会对它们执行操作,而不是直接查看DOM。就像页面的迷你API一样。)
为了举例说明我正在寻找的有用功能,我从同事那里了解到,Geb可以自动断言被测页面与虚拟页面对象中的属性相匹配,该属性代表您的页面黄瓜测试。
答案 0 :(得分:2)
我在相当大的应用程序中使用Site Prism来表示页面对象。 Cheezy的page-object gem是我当时考虑过的另一颗宝石,但它没有使用Capybara(正确使用时可以帮助解决时间问题)。页面对象宝石有自己的等待"等待"机构。
还有another gem,但我怀疑它已被遗弃。
页面对象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和维基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 README有很多很好的例子。您需要知道的其他所有内容都在Capybara's优秀的自述文件和文档中。
当然,这些小例子显示出的差异远远大于其他人 我建议你看看两者并确定你的要求是什么。