增加单个测试的 WebDriver 网络超时
Increase WebDriver network timeout for a single test
有一个沉重的页面,在 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
方法是私有的,而只有 browser
和 capabilities
公开给 public。
那么全局编辑这个超时属性的正确方法是什么?
UPD: 即使我找到了如何设置这个属性,似乎 before
/after
方法也不起作用,因为 @http ||= (
将默认超时值保存在 setUp 链中的第一个 before
中,在我的之前。
Capybara 有一个 default_wait_time 可以在测试中更改:
using_wait_time 120 do
foo(bar)
end
这就是我如何打破私有方法、没有 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
有一个沉重的页面,在 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
方法是私有的,而只有 browser
和 capabilities
公开给 public。
那么全局编辑这个超时属性的正确方法是什么?
UPD: 即使我找到了如何设置这个属性,似乎 before
/after
方法也不起作用,因为 @http ||= (
将默认超时值保存在 setUp 链中的第一个 before
中,在我的之前。
Capybara 有一个 default_wait_time 可以在测试中更改:
using_wait_time 120 do
foo(bar)
end
这就是我如何打破私有方法、没有 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