增加单个测试的 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 方法是私有的,而只有 browsercapabilities 公开给 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