有一些重页,在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
公开。
那么全局编辑此超时属性的正确方法是什么?
UPD:即使我发现如何设置此属性,似乎before
/ after
方法也不起作用,因为@http ||= (
会保存 setUp 链中第一个before
中的默认超时值,位于我的前面。
答案 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