测试用minitest水豚轨道显示/隐藏
问题描述:
我想单击按钮后测试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护栏,水豚”
答
默认情况下只水豚发现可见的元素,所以如果你使用的是完全处理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