这完全取决于您所说的“超时”是什么意思。AFAIK 在谈论 Watir-Webdriver 时,通常会讨论三种不同的超时定义:
- 浏览器等待页面加载多长时间?
- 当通过“.when_present”函数告知要等待时,Watir-Webdriver 在考虑元素“不存在”或“不可见”之前显式等待多长时间
- 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,“如何在 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。)我无法在全球范围内预测任何方法。除非你找到这样的东西——如果你找到了请告诉我——必须在每次通话时完成。:(编辑:回复者 Justin Ko 给了我关于如何执行上述操作的答案。编辑 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