默認情況下只水豚發現可見的元素,所以如果你使用的是完全處理CSS(除rack_test相當多的東西)的驅動力之一,然後只是做
assert_selector(:css, '#visu')
將足以檢查可見元素。如果你想檢查一個元素是特別不可見,你需要做的
assert_selector(:css, '#visu', visible: :hidden)
因此測試一個元素被隱藏,然後成爲可見,你可以做
assert_selector(:css, '#visu', visible: :hidden)
click_button("Show/hide")
assert_selector(:css, '#visu')
注意它可能實際上沒有意義來檢查一個元素是否存在,但是不可見,只要檢查該元素是否存在(可能是隱藏的,可能不存在)就更有意義,因爲如果按鈕行爲改變爲加載元素(或呈現模板),測試不會中斷(並且行爲的改變不會改變用戶體驗)。要做到這一點,你可以只是做
refute_selector(:css, '#visu') # or assert_no_selector depending on preference
click_button('Show/hide')
assert_selector(:css, '#visu')
如果在另一方面,你正在使用的rack_test驅動程序,它只處理CSS /的分段屬性來決定的知名度。在這種情況下,如果元素內聯樣式屬性包含display: none
/display:none
或元素具有hidden
屬性(不是類名稱爲「隱藏」),則認爲該元素不可見。所以如果元素被類名'hide_me'隱藏,在外部css文件中應用display:none
,rack_test將不會考慮隱藏該元素。相反,你可以不喜歡
assert_selector(:css, '#visu.hide_me')
和完整的測試可能會像
assert_selector(:css, '#visu.hide_me')
click_button("Show/hide")
assert_selector(:css, '#visu:not(.hide_me)')
注::如果你沒有改變Capybara.default_selector CSS選擇器的類型參數可以被省略。另外的錯誤信息會使用assert_selector
斷言,而不是做assert page.has_xxx?
assert_selector要多得多描述(:CSS,「#visu」)發現它,即使它是隱藏的,所以我怎麼能檢查,如果我使用rack_test? – Ayrad
@Ayrad閱讀從'如果'另一方面'已經回答'的部分,只需用你的應用中的任何類名稱隱藏元素替換'hide_me' - 從你的例子中可能'隱藏' –
是的,我確實閱讀過應用第二部分assert_selector(:css,'#visu.hidden')完美工作,但assert_selector(:css,'#visu:not(.hidden)')不會因爲jquery不會從元素I中刪除.hidden假設 – Ayrad