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

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

大家好,来自 Whosebug 的人们,

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

他的实现:

expect(page).to have_content(text)

我的实现:

page.has_content?(text)

我注意到,第一次实施经常会失败,因为自动化是 'too quick' 网站加载其页面。后者似乎是一个更健壮的实现,也许是因为它的简单性?

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

提前致谢!

have_content 在预期失败时引发异常,在大多数测试套件中应该比 has_content? 更频繁地使用它。 has_content? 基本上只是 have_content 的包装器,它捕获异常和 returns true 或 false,并与条件

一起使用
if page.has_content?(...)
  # click something
else
  # click something else
end

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

嗯...我认为还有一件事。 expect(page).to_have_content(text) 是 Rspec 方法,而 page.has_content?(text) 是 Minitest 方法。这仅取决于您在项目中使用的测试类型。我猜。