为什么看起来Capybara"等待页面加载"计时器适用于匹配器但不适用于查找器?

Gly*_*yph 4 ruby capybara

我目前正在运行一个检查特定元素的测试,然后对它做一些事情.该元素需要一点点javascript完成踢,但在计时器我已经有Capybara设置.

由于某些原因

assert session.has_xpath?(xpath_route)
Run Code Online (Sandbox Code Playgroud)

工作正常,但是

assert link=session.first(:xpath, xpath_route)
Run Code Online (Sandbox Code Playgroud)

失败,说它找不到元素.并且很快 - 在等待计时器用完之前很久.

我只能假设这意味着计时器只适用于匹配器,而不是发现者,这很好,但我怎么能强迫它继续寻找直到找到我正在寻找的元素?

Ali*_*irH 5

假设在使用时超时不适用,这是正确的first.但是你可以使用这个wait_until方法,它会一直重试,直到超时到期,或者块返回真值,所以:

page.wait_until() do
  session.first(:xpath, xpath_route)
end
Run Code Online (Sandbox Code Playgroud)

  • 在Capybara v2.x中,`page.wait_until`函数已被删除.[理由解释在这里](http://www.elabs.se/blog/53-why-wait_until-was-removed-from-capybara). (2认同)