来自StackOverflow的人,
我正在接管某人的工作,而我的前任使用Cucumber& Capybara& Selenium创建了一个测试集。 我对这个很熟悉,但我对他在页面上查找文本的方式有疑问。
他的实施:
期望(页面).to have_content(text)
我的实施:
page.has_content?(文本)
我注意到,第一个实施通常会失败,因为网站加载页面的自动化“太快”。后者似乎是一个更强大的实现,可能是因为它的简单性?
有人可以告诉我是对还是错,或者这两者是否根本不同。因为我一直在尝试搜索网络,但还没有真正找到一个可靠的结论..
提前致谢!
答案 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方法。这取决于您在项目中使用哪种测试。我想。