2017-02-22 78 views
0

我想單擊按鈕後測試div的可見性。測試用minitest水豚軌道顯示/隱藏

assert page.find("#visu")[:class].include?("hidden") # this passes 
    assert page.has_xpath?("//*[@id='visu'][contains(@style, 'display: none')]") 
    click_button("Show/hide") 
    assert page.has_xpath?("//*[@id='visu'][contains(@style, 'display: block')]") 

不幸的是,這是行不通的。有小費嗎?

我使用「MINITEST護欄,水豚」

回答

1

默認情況下只水豚發現可見的元素,所以如果你使用的是完全處理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?

+0

assert_selector要多得多描述(:CSS,「#visu」)發現它,即使它是隱藏的,所以我怎麼能檢查,如果我使用rack_test? – Ayrad

+0

@Ayrad閱讀從'如果'另一方面'已經回答'的部分,只需用你的應用中的任何類名稱隱藏元素替換'hide_me' - 從你的例子中可能'隱藏' –

+0

是的,我確實閱讀過應用第二部分assert_selector(:css,'#visu.hidden')完美工作,但assert_selector(:css,'#visu:not(.hidden)')不會因爲jquery不會從元素I中刪除.hidden假設 – Ayrad