无法强制点击水豚的隐藏元素

Unable to force a click of a hidden element with Capybara

我的水豚测试间歇性失败,原因是模式关闭速度不够快,因此覆盖了要单击的按钮。 Capybara 的错误消息告诉我尝试 node.triger('click')。当我用下面的代码尝试这个时

find_button('Update').trigger('click')

我收到这个错误:

 Failure/Error: find_button('Update').trigger('click')

 Capybara::NotSupportedByDriverError:
   Capybara::Driver::Node#trigger    

我正在使用 poltergeist 驱动程序,例如在我的 rails_helper 我有

Capybara.javascript_driver = :poltergeist

发生了什么事?

正如有时发生的那样,只要把问题写出来,我就找到了答案。在所讨论的特定测试中,我没有设置 js: true。我收到原始错误消息的同一文件中的另一个测试确实有 js: true。在文件中的所有测试中设置 js: true 后,我确实收到了一致的错误消息并且可以使用 ```.trigger('click').

当您需要一个请求或动画完成以便下一个测试工作时,一个可靠的策略是编写一个让 Capybara 等待直到它通过的测试。例如,如果您的带有选择器 .modal 的模态在单击确定按钮后消失,您可以编写如下测试:

click_button 'OK'
expect(page).not_to have_css '.modal'
click_button 'Update'

默认情况下,Capybara 会在测试失败前等待两秒钟让动画和异步请求完成。可以用 Capybara.default_max_wait_time = 5 配置,例如将其更改为 5。