增加单个测试的WebDriver网络超时

时间:2015-03-04 14:06:09

标签: ruby rspec selenium-webdriver timeout capybara

有一些重页,在visit之后,Selenium对Capybara没有响应一分钟,所以无论我打电话,都会抛出Net::ReadTimeout
我可以在某种程度上编辑它,如:

http_client = Selenium::WebDriver::Remote::Http::Default.new
http_client.timeout = 120
Capybara::Selenium::Driver.new(app,
  http_client: http_client,

但是在一些重复超时的情况下,我的测试会持续太长时间,因此我不希望全局增加超时。
我想以某种方式增加它以进行单一测试:

before do
  @timeout = page.driver.bridge.http.timeout
  page.driver.bridge.http.timeout = 120
end
after do
  page.driver.bridge.http.timeout = @timeout
end

但在/lib/selenium/webdriver/common/driver.rb中,bridge方法是私有的,而只有browsercapabilities公开。

那么全局编辑此超时属性的正确方法是什么?

UPD:即使我发现如何设置此属性,似乎before / after方法也不起作用,因为@http ||= (会保存 setUp 链中第一个before中的默认超时值,位于我的前面。

2 个答案:

答案 0 :(得分:0)

Capybara有一个default_wait_time,可以在测试过程中更改:

using_wait_time 120 do
  foo(bar)
end

答案 1 :(得分:0)

这就是我打破私有方法,没有getter的属性以及单个命令的修补超时的方法:

http = page.driver.browser.send(:bridge).http.instance_variable_get(:@http)
old_timeout = http.read_timeout
begin
  http.read_timeout = 120
  find("anything") # here we had timeout
ensure
  http.read_timeout = old_http_timeout
end