2015-07-13 77 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