使用等待你的Capybara方法,只有在AJAX完成後,斷言內容在頁面上應該存在於頁面上。例如,如果頁面應該顯示「Page loaded!」 AJAX已經完成後才和假設你使用RSpec的,這樣做:
expect(page).to have_content("Page loaded!")
然後,您可以安全地測試頁面上的其他東西,取決於AJAX已經完成。
水豚方法在於等待指定的內容顯示包括find
和find_*
方法,within
,has_content?
/has_no_content?
,has_css?
/has_no_css?
,has_selector?
/has_no_selector?
,click_*
,fill_in
,check
,uncheck
,select
和choose
。一些水豚方法不需要等待,包括current_path
,visit
,execute_script
,evaluate_script
和節點存取器如text
和value
。 all
和first
等待你給他們的選項,給他們一些特定的等待(:count
,:minimum
,:maximum
,:between
),否則他們不會。這是一個雷區。 (我把名單主要來自this blog post。)
還有其他的方式來等待(sleep
(壞),輪詢數據庫中,直到引起AJAX出現的變化等),但使用水豚的方法是等待你的是通常和推薦的方式。
好吧,我給了一個去,但我仍然得到空身體標籤。我正在看的網站是用Angular.js編寫的,似乎在「ng-cloak」標籤中被覆蓋,這意味着它不會渲染任何東西,直到它準備好呈現所有內容。有沒有辦法請求頁面,然後延遲幻像渲染幾秒鐘? – bkunzi01
不是我所知道的。你可以在你的測試中「睡覺」,但是這可以保證一個慢速測試。我真的會試着找到一些你可以等待的內容。我用這種方式測試了很多Angular。此外,請確保poltergeist [配置爲重新引發Javascript錯誤](https://github.com/teampoltergeist/poltergeist#customization),以便您知道該頁面是否因某個原因而被渲染。 –
當我做了一切事情,從「訪問」後的代碼沉睡到添加rasterize.js,但是,但似乎得到任何比機械化或Nokogiri會得到更多。只要喜歡的東西:
< -! - > 如果您有任何更多的建議我會非常感激它,因爲它已經兩天,我仍然< - -