2016-11-22 164 views
0

我幾天到寫黃瓜/水豚測試的第一次,我遇到了麻煩。黃瓜/水豚找到()不重試

我有一個Login.feature文件有兩個特點;一個使用無效憑證測試登錄嘗試,另一個使用有效憑證。前者測試成功,後者失敗。

我通過查找是對每種類型的動作後呈現引導alert測試它們。在登錄失敗時,頁面會刷新警報消息。如果成功,用戶將被重定向到提供警報的主頁。

我的問題似乎是,在使用有效憑據測試尋找「成功」的警報時,它失敗,因爲該頁面沒有加載。我知道find方法應該在Capybara.default_wait_time定義的一段時間內繼續查找給定元素。

以下是簡單的測試我使用的是:

find('div.alert.alert-success') 

這導致Capybara::ElementNotFound錯誤每次。我已將default_wait_time設置爲不同的長度(最長爲500),但無論如何都會立即發生錯誤。我已經深入到find的代碼中,並注入了一些輸出,以便我可以看到該塊是否在該段時間內繼續執行 - 它似乎只嘗試一次,並在異常提出時停止。

我看着這個錯誤的方式嗎?從我讀過的內容來看,不鼓勵明確地等待一段時間,但默認機制不適用於我。

+0

你有沒有試過'expect(page).to have_selector('div.alert.alert-success')'?或者'expect(page).to have_selector('#flash_notice')'。如果你發佈你的html代碼會更好 – fabersky

+0

你使用的驅動程序是什麼? –

+0

我也嘗試過'have_selector'方法,結果相同。 我不確定我使用的是哪個驅動程序。我沒有修改它,所以我想默認情況下使用Cucumber v2.4.0 gem的驅動程序。 –

回答

0

在水豚的默認驅動程序是機架式測試,不做任何等待,因爲它不支持JS或任何其他類型的異步行爲。這聽起來像你的警報是由JS呈現(這不會發生在機架測試驅動程序),被隱藏,直到被JS顯示(不會發生)或您的憑據實際上不是有效的。您可以通過查看`page.html'來檢查正在呈現的html。要使用不同的驅動程序,請參閱Capybaras README - https://github.com/teamcapybara/capybara#drivers

+0

操作測試有點確認了憑據無效,即使我在手動登錄時使用相同的憑據。 –

+0

@RyanDurel手動登錄到測試環境?在通常在開發環境中工作的測試環境中運行測試,每個測試都有自己的數據庫實例,在測試中,您需要使用工廠或設備生成每個測試所需的記錄。 –

+0

你是對的,那是我沒有意識到的。我需要對測試環境進行一些更改以匹配dev,儘管我仍然遇到問題。這更多與我們的項目設置有關。 –