Watir implicit_wait似乎不起作用

nir*_*rev 3 watir watir-webdriver

我们目前正在使用带有firefox的watir-webdriver(0.6.2)来运行验收测试.我们的测试需要很长时间才能运行,并且通常会因超时错误而失败.我们希望减少超时时间,以便它们更快地失败.

我们尝试了:

browser = Watir::Browser.new("firefox")
browser.driver.manage.timeouts.implicit_wait=3 
Run Code Online (Sandbox Code Playgroud)

但是,我们仍然会遇到30秒的超时.

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

Sam*_*Sam 6

这完全取决于"超时"的含义.在讨论Watir-Webdriver时,AFAIK有三种不同的超时定义:

  1. 浏览器等待页面加载多长时间?
  2. Watir-Webdriver 在被告知通过'.when_present'函数等待时,在考虑元素"不存在"或"不可见"之前明确等待多长时间
  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
Run Code Online (Sandbox Code Playgroud)

- Alistair Scott,'如何在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
Run Code Online (Sandbox Code Playgroud)

由于'when_present',默认情况下Watir-Webdriver将在失败前等待30秒.或者,您可以说'when_present(10)'来更改默认值并等待10秒.(Watir-Webdriver> Watir :: Wait#when_present.)我无法以任何方式在全球范围内做到这一点.除非你找到这样的东西 - 如果你这样做,请告诉我 - 必须在每次通话时完成.:( 编辑:同事回答者贾斯汀柯给了我如何做我上面描述的答案.编辑2:@jarib将此添加到Watir,每个@justinko链接的答案:"更新:这个猴子补丁已合并到在watir-webdriver v0.6.5中将不再需要watir-webdriver等.您可以使用以下命令设置超时: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
Run Code Online (Sandbox Code Playgroud)