12

如果如何使用 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

4

2 回答 2

13

我刚刚发现了一个需要使用#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
于 2013-10-24T23:08:10.050 回答
3

请参阅此可能对您有所帮助的辅助方法。在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
于 2013-01-29T17:22:38.000 回答