【发布时间】:2015-10-01 17:14:31
【问题描述】:
我有一个页面有时会在一分钟内加载。假设这是预期的行为并且不会改变。在这些情况下,我会收到Net::ReadTimeout。
请注意,这是在通过单击上一页上的按钮导航到页面之后,而不是 ajax 请求。因此Capybara.using_wait_time 没有帮助。
我尝试了一些激进的方法(其中一些我知道不会奏效),例如:
- 设置
page.driver.browser.manage.timeouts的implicit_wait、script_timeout和page_load。 - 循环遍历整个对象空间并设置所有
Selenium::WebDriver::Remote::Http::Default的timeout值。 - 循环遍历整个对象空间并设置所有
Net::HTTP的read_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