【发布时间】:2015-05-05 13:29:33
【问题描述】:
有一个很重的页面,在 visiting 之后 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 ||= ( 将默认超时值保存在第一个before 在我之前的 setUp 链中。
【问题讨论】:
-
也许和 ajax 请求一样?
def wait_for_ajax Capybara.current_session.instance_eval do wait_until { evaluate_script('$.active').zero? } end end -
@rubykid,这个超时是一个较低级别的异常——当 Selenium 挂起时,你甚至不能
evaluate script。 -
'driver.send(:bridge)' ?
-
@rubykid,这就是我现在用来破解隐私的方法。需要几分钟来确保实现目标。但我想找到正确的方法,而不需要破解。
标签: ruby rspec selenium-webdriver timeout capybara