2015-07-13 42 views
5

我有一个页面有时会在一分钟内加载。假设这是预期的行为,并且不会改变。在这些情况下,我得到Net::ReadTimeout水豚增加最大允许页面加载时间

请注意,这是在点击上一页上的按钮而不是ajax请求导航到页面之后。因此Capybara.using_wait_time没有帮助。

我已经尝试了一些过激的事情(有些我知道这些是行不通的),如:

  • 设置page.driver.browser.manage.timeoutsimplicit_waitscript_timeoutpage_load
  • 循环遍历整个对象空间并设置所有的Selenium::WebDriver::Remote::Http::Defaulttimeout值。
  • 循环遍历整个对象空间并设置全部 Net::HTTPread_timeout
  • page.driver.browser.send(:bridge).http.instance_variable_get(:@http).read_timeout=

无似乎工作。这应该是非常微不足道的,但我仍然无法找到办法。

如果你知道一个webdriver不可知的解决方案,将是伟大的。如果没有 - 我使用

+0

我的2美分:自动化所有关于快速反馈,如果您的应用程序需要超过一分钟加载,增加页面超时不是答案,将您的应用程序加载时间缩短是你应该关注的...... – Bodao

+0

@ user3087106,我完全同意。但是,在目前的情况下,这不适用。假设我正在测试其他人的在线项目,并且他们不愿意投入优化操作所需的资源/将其放在后台进程或其他任何项目中。 – ndn

+0

您是否试过增加Capybara.default_max_wait_time(默认值为2秒),以及仅在新页面上提供的元素的断言? – Sam

回答

11

Selenium有很多不同的超时设置,其中一些可以在运行时更改,其他的在驱动程序初始化时必须设置。您很可能会遇到默认为60秒的Http :: Default超时。你可以通过你自己的实例为硒驾驶员http_client

Capybara.register_driver :slow_selenium do |app| 
    client = Selenium::WebDriver::Remote::Http::Default.new 
    client.timeout = 120 
    Capybara::Selenium::Driver.new(app, http_client: client) 
end 

覆盖这个,然后使用:用于测试slow_selenium司机将接管一分钟加载页面

+0

只是为了澄清任何人的未来参考 - 您可以通过添加'driver :: slow_selenium'标签来告诉Capybara使用新的驱动程序来满足您的某些规格。 – ndn