我使用Capybara,selenium-webdriver gem和chromedriver來驅動我的啓用javascript的測試。水豚/硒在location.reload上獲得一個Net :: ReadTimeout()
問題是由於Net::ReadTimeout
錯誤,我們大約50%的構建失敗。起初,這表現爲「無法找到元素」的錯誤,但在將Capybara的默認最大等待時間提高到30秒後,我開始看到超時。
我檢查了超時發生時的屏幕截圖,它滯留在我們在使用Javascript函數location.reload()
重新加載頁面之前簡要顯示的'成功登錄'模式。
我已經在本地運行測試,有時可以隨機重現它。有時它會被這種模式拉動,並且重新加載的速度太快,你幾乎看不到它,而其他時間它會永遠掛起。
我不覺得這是一個資產編譯問題,因爲該站點已經加載,以便用戶訪問登錄表單。
想知道是否有人以前見過這個,並知道解決方案。
具體代碼:
visit login_path
page.within '#sign-in-pane__body' do
fill_in 'Email', with: user.email
click_button 'Submit'
end
expect(page).to have_content 'Enter Password'
page.within '#sign-in-pane__body' do
fill_in 'Password', with: user.password
click_button 'Submit'
end
expect(page).to have_text 'Home page landing text'
掛斷發生click_button 'Submit'
和期待主頁文本之間。
導致超時的邏輯流程是用戶提交登錄表單,我們等待服務器呈現一個成功登錄後觸發JS事件的模板。當觸發事件發生時,我們會顯示一個模式說明登錄成功,然後執行location.reload()
。
待辦事項你的應用程序中有什麼(機架攻擊等)來限制請求?如果沒有,請檢查您的test.log,以獲取有關請求是否實際完成以及應用程序在做什麼的信息。另外,你有什麼'Capybara.server'設置? –
我知道我昨天說過我能夠在本地複製,但今天很難做到這一點來檢查日誌。沒有請求限制。我不是手動將服務器設置爲任何東西,所以它是默認值。 –
如果您沒有將Capybara.server設置爲默認爲Webrick的任何內容,則可能存在多個同時發生的請求問題。嘗試設置'Capybara.server =:puma',看看這是否有所作爲。 –