page.has_content?()vs. expect(page).to have_content

时间:2016-04-25 12:48:27

标签: selenium cucumber capybara

来自StackOverflow的人,

我正在接管某人的工作,而我的前任使用Cucumber& Capybara& Selenium创建了一个测试集。 我对这个很熟悉,但我对他在页面上查找文本的方式有疑问。

他的实施:

  

期望(页面).to have_content(text)

我的实施:

  

page.has_content?(文本)

我注意到,第一个实施通常会失败,因为网站加载页面的自动化“太快”。后者似乎是一个更强大的实现,可能是因为它的简单性?

有人可以告诉我是对还是错,或者这两者是否根本不同。因为我一直在尝试搜索网络,但还没有真正找到一个可靠的结论..

提前致谢!

2 个答案:

答案 0 :(得分:6)

have_content在期望失败时引发异常,并且在大多数测试套件中应该比has_content更频繁地使用? has_content?基本上只是一个包含异常的包装器,它捕获异常并返回true或false,并用于条件

if page.has_content?(...)
  # click something
else
  # click something else
end

您的前任正在正确使用Capybara,因为如果您正在测试以确保页面具有您应该使用have_content的特定内容。 has_content?永远不会失败测试(只是默默地返回false并继续)。如果您的have_content断言失败,因为网站太慢,您可能需要增加Capybara.default_max_wait_time(或弄清楚为什么页面加载时间太长)

答案 1 :(得分:0)

嗯...我想还有一件事。 Expect(page).to_have_content(text)是Rspec方法,而page.has_content?(text)是Minitest方法。这取决于您在项目中使用哪种测试。我想。