2013-11-01 52 views
8

顯然,sleepwait_until不使用水豚的最新版本有效,根據webpageupdates水豚是否需要睡眠才能工作?

不過,我有一組測試,如果我加入sleep(1)調用測試,只有在快速計算機上工作。也就是說,測試看起來像:

describe "dosimeters page" do 
    before do 
    click_link("Dosimeter Read History", :match=>:first) 
    end 
... 

成爲

describe "dosimeters page" do 
    before do 
    unix_wait 
    click_link("Dosimeter Read History", :match=>:first) 
    end 
... 

在那裏我已經定義unix_wait爲:

def unix_wait 
    case RbConfig::CONFIG['host_os'] 
    when /darwin/ 
    when /linux-gnu/ 
    sleep(1) 
    end 
end 

的事情是,我有一個老的Ubuntu 12.04四核在Jenkins上運行這些測試的筆記本電腦,並且在沒有unix_wait調用的情況下,一切正常。測試在運行Ubuntu 13.10的六核桌面和MacBook Pro筆記本電腦上隨機失敗,但是如果我添加了unix_wait調用,則測試會通過。

測試失敗本身表明加載失敗(即CSS元素缺少一些運行,但不能在其他人),以及事情正在實際測試時,該網站手動加載工作。

所以這裏有什麼相應的措施?顯然,在測試過程中不允許使用sleep,也不允許使用wait_until。然而,睡眠正在發揮作用,但對我來說,這看起來非常粗糙。我應該看看#synchronized?從我從這些博客文章中收集到的信息,當我撥打電話號碼click_link時,這些信息已經被調用,並且測試仍然失敗。

這裏接受的協議是什麼?

我要補充的,因爲我認爲這是很重要的:這是所有的JavaScript測試。我使用基於qt4(不是qt5)構建的capybara-webkit。我正在考慮切換到poltergeist或其他JavaScript驅動程序作爲調試步驟。

+0

您可以嘗試使用webdriver進行調試,但我有類似的問題。 –

+0

當我使用ajax時,我遇到了與capybara-webkit相同的問題。我不知道是否可以解決這個問題,但值得一試。 – basgys

+0

你能解釋一下你看到的失敗嗎?我不清楚「錯過的css元素」真正需要什麼。 – Shepmaster

回答

4

在情況下,如果你檢查的網頁時,等待設定的時間量,直到內容可用的內容你不這樣做已經在您的測試斷言。

所以,相反增加了睡眠的你可以添加類似

expect(page).to have_content 'Success' 

水豚容納Ajax和元素等的負載,以便檢查內容時,它會等待含蓄。

您可以更改默認的等待時間,如果你需要允許您知道可能需要更長的時間,即3日聚會查詢/登錄

Capybara.default_wait_time = 5 
+1

水豚_應該適應Ajax,但我不完全確定它,因爲這些在測試過程中使用':js => true'時失敗。更改'default_wait_time'並沒有什麼幫助,但有時'save_and_open_page'修復了這個問題(儘管導致一個窗口中斷工作)。 – mmr

+0

Asta是對的,問題在於你沒有觸發Capybara的等待機制,因爲你沒有檢查內容。 Asta提到檢查'have_content',你沒有這樣做。 – kross

+0

這也是在這裏回答的:http://stackoverflow.com/a/20003280/2363935 – kross

0

wait_untilsleep一個很好的選擇是using_wait_time,一個元素的裝載其示例如下所示。

using_wait_time 5 do 
    page.should have_content '<content>' 
end 

您也可以重新加載頁面,之後您可以檢查您擁有的任何條件。這有時適用於我。

visit current_url