如何使用capybara-webkit在AJAX调用之后等待元素出现?

Pra*_*ams 4 capybara capybara-webkit

水豚方法wait_until似乎不适用于capybara-webkit.是否有任何替代解决方案,或任何Javascript实现?

故意需要一些替代品sleep,例如sleep 2.

在此输入图像描述

Dar*_*evo 7

你可以看看Thoughtbot包含的这个解决方案:这里

我发现它非常有用.

  • 将解决方案的要点包含在答案正文中会更好. (4认同)
  • 这个解决方案似乎假设定义了`window.jQuery`.对于使用CommonJS模块捆绑的项目,情况不一定如此. (2认同)

Dav*_*uth 5

如果你的AJAX调用导致对DOM的更改,那么如果你这样做,Capybara会等待它

page.should have_selector?("some selector")
Run Code Online (Sandbox Code Playgroud)

这是一个故意的Capybara功能,它等待(直到Capybara.default_wait_time)have_selector?和相关的方法是真实的.

如果你的AJAX调用没有导致对DOM的更改,那么使用Capybara就无法在浏览器端等待它.您可能能够在Javascript中检测到AJAX调用何时完成并以某种方式将其传达给Capybara,但这会将您的测试和实现紧密地联系在一起.在这种情况下,常见的方法是等待AJAX​​调用的服务器端效果(创建或更新或删除模型对象,发送电子邮件等).由于Capybara无法看到服务器端,因此您必须等待服务器端自行更改.

在Capybara 1中,您可以使用Capybara wait_until来等待服务器端的更改.wait_until从水豚2.取出我张贴的实现wait_until我的回答后钩原因此Rspec的/水豚测试通过,为什么加上"睡眠1"的?