2016-11-14 89 views
1

在我的應用程序中,我有一個頁面,彈出一個模式,將更新其中的一些內容,並在不確定的時間量之後自行消除(並變得不可見)。在我的規範中,我試圖等到模態被解散。我的策略是讓水豚等待與模式的內容做水豚無法找到隱藏的元素與文字

expect(page).to have_css('.hidden-element', visible: :hidden, text: 'Hidden Content') 

然而,成爲無形的,它看起來像水豚將無法得到隱藏元素的文本,我得到了錯誤:

expected to find css ".hidden-element" with text "Hidden Content" but there were no matches. Also found "", which matched the selector but not all filters. 

,如果我做:allfalse它會通過,但是這不是我想要的:

expect(page).to have_css('.hidden-element', visible: :all, text: 'Hidden Content') 

既然我不能改變我的AP p,我想知道爲什麼這不起作用,或者在這種情況下最好的辦法是達到這個目的。謝謝!

我正在使用RSpec,Capybara,Capybara-webkit。

回答

1

如果元素實際上在頁面上變得不可見,而不是完全從頁面中刪除,主要區別在於,當可見文本與應用CSS的可見文本匹配時(text-transform等) )。因此,如果在HTML元素的文本實際上是「隱藏的內容」,但也適用於它text-transform: capitalize時可見你需要檢查不可見元素

expect(page).to have_css('.hidden-element', visible: :hidden, text: 'hidden content') 

如果,另一方面,當測試對HTML表單在HTML文本是你展示它和元素實際上被刪除從頁(而不是隻是被隱藏),你可以做

expect(page).not_to have_css('.hidden-element', visible: :hidden, text: 'Hidden Content') 

等待它被刪除。

更新:使用visible: :hidden選項時,水豚在使用文本無法匹配時存在限制。您可以通過執行類似於

element = page.find('.hidden-element', visible: :all, text: 'hidden content') 
expect(element).to match_css('.hidden-element', visible: :hidden) 
+0

感謝您的建議!我認爲在我的情況下,這與案件無關。例如,當文本是'1234'時它不起作用。我覺得'visible::hidden'和'text:'1234''是互相排斥的,它們完全獨立工作。 – 322896

+0

@ 322896你使用什麼版本的水豚? –

+0

@ 322896經過測試這看起來這是使用'visible::hidden'選項時目前水豚的限制 - 我已經用可能的解決方法更新了我的答案 –