2017-08-28 23 views
0

我有這樣的步驟:是否豚「內」對付阿賈克斯,爲什麼CSS中失敗,錯誤爲「無法找到找到CSS」

Then(/^I can see the Eligible Bugs list "([^"]*)"$/) do |bugs| 
    bugs_list = bugs.split(", ") 
    assert page.has_css?(".eligible-bugs", :visible => true) 
    within(".eligible-bugs") do 
    bugs_list.each do |bug| 
    assert page.has_content?(bug) 
    end 
    end 
end 

但是,此舉在「內有時會失敗(「.eligible-bugs」)「錯誤」無法找到css「。」合格bug「'

我覺得這很奇怪。 爲斷言已通過。這意味着CSS是可見的。 爲什麼在找不到css?它是如何發生的。

但是,此舉在「內(」合格臭蟲「)做」有錯誤「無法找到CSS‘.eligible臭蟲’」

我覺得奇怪的是有時會失敗。 爲斷言已通過。這意味着CSS是可見的。 爲什麼在找不到css?它是如何發生的。

BTW,我已經把我的最長等待時間爲5

Capybara.default_max_wait_time = 5 

回答

0

應該發生的唯一方法是,如果當你運行測試頁面是動態變化 - 你的支票的某個時候它正在改變的頁面上的所有錯誤內容以及'.eligible-bugs'元素正在發生變化。測試和瀏覽器是分開運行的,所以發生的方式和原因取決於你的頁面在瀏覽器中做了什麼,它還取決於測試前的步驟。

此外,請注意,它不一定會在has_css?within聲明首次運行之間消失。如果它在運行within的代碼中的任何時候消失,它可能會拋出相同的錯誤,因爲它會嘗試重新加載'.eligible-bugs'元素。

從問題的標題我假設您要檢查的列表是搜索或篩選操作的結果。如果是這樣,那麼這個動作是否會移除現有的'.eligible-bugs'元素,然後在一段時間內將其替換爲從ajax請求返回的新元素?如果是這種情況,那麼由於您控制測試數據,您應該等待顯示正確的結果數,從而確保在檢查文本之前完成了所有元素替換。你怎麼做取決於頁面的確切構成,但是如果每個符合條件的bug都是'.eligible-bugs'的孩子,並且有一類'.eligible-bug',我會寫你的測試類似

Then(/^I can see the Eligible Bugs list "([^"]*)"$/) do |bugs| 
    bugs_list = bugs.split(", ") 
    assert_css(".eligible-bugs > .eligible_bug", count: bugs_list.size) # wait until the expected number of results have shown up 

    within(".eligible-bugs") do 
    bugs_list.each do |bug| 
     assert_content(bug) 
    end 
    end 
end