【问题标题】:Capybara increase max allowed page load timeCapybara 增加最大允许页面加载时间
【发布时间】:2015-10-01 17:14:31
【问题描述】:

我有一个页面有时会在一分钟内加载。假设这是预期的行为并且不会改变。在这些情况下,我会收到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 无关的解决方案,那就太好了。如果没有 - 我正在使用 selenium

【问题讨论】:

  • 我的 2 美分:自动化就是快速反馈,如果您的应用程序加载时间超过一分钟,则增加页面超时不是解决方案,缩短应用程序加载时间是您应该做的专注于...
  • @user3087106,我完全同意。但是,在当前情况下,这并不适用。假设我正在测试其他人的实时项目,他们不愿意投入优化操作所需的资源/将其置于后台进程或其他任何东西中。
  • 您是否尝试过增加 Capybara.default_max_wait_time(默认为 2 秒)以及仅在新页面上可用的元素的断言?
  • @Sam,是的。事实上,using_wait_time 在内部调用 default_max_wait_time,如文档中所示:rubydoc.info/github/jnicklas/capybara/Capybara.using_wait_time 它的想法是,如果您知道将通过一些 javascript 对 dom 进行一些修改,则应该等待一段时间立即宣布“不,它不存在!”。但这是行动之前的等待。这里的情况不同 - 我只是在页面加载很长时间时不超时。

标签: ruby selenium-webdriver capybara net-http page-load-time


【解决方案1】:

Selenium 有很多不同的超时设置,其中一些可以在运行时更改,另一些则必须在驱动程序初始化时设置。您很可能遇到了默认为 60 秒的 Http::Default 超时。您可以通过将您自己的实例作为 http_client 传递给 Selenium 驱动程序来覆盖它

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 驱动程序进行测试,加载页面需要一分钟以上

【讨论】:

  • 只是为了澄清任何人的未来参考 - 您可以通过添加 driver: :slow_selenium 标签告诉 Capybara 为您的某些规格使用新驱动程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多