【问题标题】:Why Capybara feature tests don't wait?为什么 Capybara 功能测试不等待?
【发布时间】:2016-06-30 13:49:11
【问题描述】:

我的测试套件有一个小问题:当我在页面上运行检查 ajax 操作的规范时,有时会出现随机错误

Failure/Error: expect(page).to have_content 'DHH'

这个错误很少显示(大约 1/100),但这让我很困惑。我认为这是一个“竞争条件”的原因,我将此配置添加到我的 spec/rails_helper.rb

Capybara.default_max_wait_time = 10

但这对我没有帮助,我决定添加时间戳

  it 'adds new DHH', js: true do
    find('#modal_new_dhh').click
    fill_in('name', with: 'DHH')

    p 'click button'
    p Time.now.strftime('%H:%M:%S.%L')
    click_button('Submit')

    p 'checking content'
    p Time.now.strftime('%H:%M:%S.%L')
    expect(page).to have_content 'DHH'

    p 'after checking content'
    p Time.now.strftime('%H:%M:%S.%L')
  end

然后看看

"click button"
"17:34:43.083"
"before checking content"
"17:34:43.127"
"after checking content"
"17:34:43.213"

为什么水豚在点击按钮后不等待?

对不起我的英语不好

【问题讨论】:

    标签: ruby-on-rails capybara integration-testing


    【解决方案1】:

    您的示例中的等待发生在 have_content 匹配器中。你输出时间的地方永远不会显示延迟,因为 click_button 没有什么可等待的,它只是点击一个按钮并继续前进(因为它不知道它会等待什么,点击一个按钮可以做任何事情),但是have_content 匹配器将等待 Capybara.default_max_wait_time 出现内容。

    注意您的find、'fill_in' 和click_button 调用也会等待相关元素出现后再执行其操作

    【讨论】:

    • 嗨,汤姆!顺便说一句,我现在在 github 上阅读了你标记为 github.com/jnicklas/capybara/issues/1481 的问题:) 你现在说 have_content matcher 应该等待 Capybara.default_max_wait_time,但这对我不起作用。我更新了问题
    • @vear 太好了,要意识到的重要一点是,Capybara 只能等待它知道要等待的东西。当你告诉它点击一个按钮时,它知道在点击它之前等待按钮出现(所以它是可点击的),但不知道点击该按钮的结果是什么,所以不知道之后要等待什么。
    • @vear 是什么让您认为它没有等待?它会等待 UP TO Capybara.deafult_max_wait_time 但当页面上有“DHH”时会更快地返回 - 所以你的应用程序已经返回了更新的页面或者你正在检查初始页面上已经存在的内容(确保你是检查仅在单击按钮执行的任何操作完成后才出现在页面上的内容)
    • @vear 是的,我现在明白了
    【解决方案2】:

    正如你所说,这是一个竞争条件。至于为什么会发生,我真的不能说,我能想到的唯一原因是用户体验和自动化测试之间存在差异,因为计算机速度非常快。

    前段时间我也面临同样的挑战,我找到了this tutorial,它向我展示了解决此类问题的方法。希望对你也有用。

    【讨论】:

    • 谢谢你的回答,我以前用过,但我想知道-为什么水豚在点击按钮后不等待
    • @vear 因为点击一个按钮可以做任何事情(或什么都不做),所以没有办法知道要等待什么 - 当你告诉它找到东西时,Capybara 会等待。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2014-10-07
    相关资源
    最近更新 更多