Watirimplicit_wait 似乎不起作用

标签 watir watir-webdriver

我们目前正在使用 watir-webdriver (0.6.2) 和 firefox 来运行验收测试。 我们的测试需要很长时间才能运行,并且经常因超时错误而失败。 我们想减少超时时间,让它们更快地失败。

我们试过了:

browser = Watir::Browser.new("firefox")
browser.driver.manage.timeouts.implicit_wait=3 

但是,我们仍然遇到 30 秒超时。

我们找不到有关此问题的任何文档或问题。有谁知道如何正确配置 Watir 等待超时?

最佳答案

这完全取决于您所说的“超时”是什么意思。 AFAIK 在谈论 Watir-Webdriver 时,通常会讨论三种不同的超时定义:

  1. 浏览器等待页面加载多长时间?
  2. 当通过 '.when_present' 函数告知要等待时,Watir-Webdriver 显式地等待多长时间才能考虑元素“不存在”或“不可见”
  3. Watir-Webdriver 在考虑元素“不存在”或“不可见”之前隐式等待对象出现多长时间(当不通过显式调用等待时,请参阅 #2)

#1:页面加载

Justin Ko 是对的,如果您的目标是修改页面加载超时,您可以按照所述设置页面加载超时,尽管看起来规范的方法是在创建浏览器并将其传递给浏览器之前设置客户端超时创作时:

client = Selenium::WebDriver::Remote::Http::Default.new
client.timeout = 180 # seconds – default is 60

b = Watir::Browser.new :firefox, :http_client => client

- Alistair Scott, 'How do I change the page load Timeouts in Watir-Webdriver'

#2:显式超时

但我认为@p0deje 说您正在经历明确的超时是正确的,尽管在没有看到您的代码的情况下无法肯定地说。在下面我经历了显式声明覆盖了隐式声明(我不确定这是否是故意的):

b = Watir::Browser.new :firefox
b.driver.manage.timeouts.implicit_wait = 3 
puts Time.now #=> 2013-11-14 16:24:12 +0000
begin
  browser.link(:id => 'someIdThatIsNotThere').when_present.click
rescue => e
  puts e #=> timed out after 30 seconds, waiting for {:id=>"someIdThatIsNotThere", :tag_name=>"a"} to become present
end
puts Time.now #=> 2013-11-14 16:24:43 +0000

由于“when_present”,Watir-Webdriver 默认会在失败前等待 30 秒。或者,您可以说“when_present(10)”来更改默认值并等待 10 秒。 (Watir-Webdriver > Watir::Wait#when_present。)我无法在全局范围内预测任何方法。除非你找到这样的东西——如果你找到了请告诉我——必须在每次通话时完成。 :( Edit: Fellow answerer Justin Ko gave me the answer as to how to do what I described above . Edit 2: @jarib 将此添加到 Watir,根据链接答案中的@justinko:“更新:此猴子补丁已合并到watir-webdriver 等在 watir-webdriver v0.6.5 中不再需要。您可以使用以下方法设置超时:Watir.default_timeout = 90"

#3 隐式超时

您提供的代码设置了 Watir-Webdriver 等待任何元素出现而无需您明确说明的时间:

b = Watir::Browser.new :firefox
b.driver.manage.timeouts.implicit_wait = 3 
puts Time.now #=> 2013-11-14 16:28:33 +0000
begin
  browser.link(:id => 'someIdThatIsNotThere').when_present.click
rescue => e
  puts e #=> unable to locate element, using {:id=>"someIdThatIsNotThere", :tag_name=>"a"}
end
puts Time.now #=> 2013-11-14 16:28:39 +0000

关于Watirimplicit_wait 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17242404/

相关文章:

ruby - 无法使用 selenium hub docker 和 ruby​​ watir 更改 chrome 的默认下载目录

ruby - 我如何访问 pop ui 按钮?

ruby - 整个测试完成后如何报告所有失败?

ruby - 如何在数字数组中找到最佳匹配元素?

ruby - 使用 Watir 保存屏幕截图时,png 为空或 0kb

ruby - 如何实现 Watir 类(例如 PageContainer)?

ruby-on-rails - 沃蒂尔 Selenium : unrecognized arguments for Browser constructor

html - 需要帮助将兄弟元素错误消息定位到特定的选择列表

ruby-on-rails - Watir-Webdriver - 协议(protocol)不支持的地址族 - socket(2)

google-chrome - 从 teamcity 启动时使用 ChromeDriver 时出错