【问题标题】:page.has_content?() vs. expect(page).to have_contentpage.has_content?() 与 expect(page).to have_content
【发布时间】:2018-11-27 17:41:30
【问题描述】:

大家好,来自 StackOverflow,

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

他的实现:

expect(page).to have_content(text)

我的实现:

page.has_content?(文本)

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

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

提前致谢!

【问题讨论】:

    标签: selenium cucumber capybara


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢清晰的解释!我主要是想弄清楚为什么要设置“有内容”。你的解释很有道理。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 2022-12-28
      • 2020-03-19
      相关资源
      最近更新 更多