如果使用wait_until非常清楚(我在使用本机Webdriver方法创建测试时使用了这样的方法),而不是新的同步方法(抱歉:))。我已经阅读了关于为什么不推荐使用wait_until的主题,我已经阅读了有关该文章的文章,我已经阅读了带有方法描述的文档,并且还阅读了描述所在的代码。但我没有找到任何示例或教程如何使用此方法。
任何人,请提供一些案例,我(也许还有其他人)可以看到并学习如何使用这种方法
例如案例
expect(actual).to equal(expected)
只有在超时后才能“放”同步方法以获得负异常?
UPD:对于有兴趣的人,请查看以下链接:
http://www.elabs.se/blog/53-why-wait_until-was-removed-from-capybara
https://github.com/jnicklas/capybara/blob/master/lib/capybara/node/base.rb#L44
答案 0 :(得分:11)
我刚刚发现需要使用#synchronize的情况。我有一个帮助方法,它在页面上查找一个元素,如果它存在,它点击它并返回一些在页面上更新的文本(通过JavaScript)。在某些情况下,在找到元素并单击它之间,由于其他JavaScript代码,它可能会消失(并可能重新出现)并且可能引发Selenium :: WebDriver :: Error :: StaleElementReferenceError异常。所以我像这样使用同步:
page.document.synchronize do
element = first('#whatever')
if element
element.click
find('#foo').text
else
nil
end
end
答案 1 :(得分:2)
请参阅此辅助方法,它可能对您有所帮助。找到https://gist.github.com/10c41024510ee9f235e0
# spec/support/capybara_helpers.rb
module CapybaraHelpers
def wait_for_whizboo
start = Time.now
while true
break if [check for whizboo here, e.g. with page.evaluate_script]
if Time.now > start + 5.seconds
fail "Whizboo didn't happen."
end
sleep 0.1
end
end
end
RSpec.configure do |config|
config.include CapybaraHelpers, type: :request
end