Capybara在搜索中排除div?

时间:2015-07-14 23:55:41

标签: cucumber capybara

有没有办法告诉Capybara在搜索页面时忽略div。

这样的东西
page.assert_no_selector('a', :unless => '.an-excused-class a')

或者,在特定步骤中是否有一种方法可以告诉Capybara不计算隐藏的元素。我已经看到了一些全球性的方法,但这不是我想要的。

TIA

2 个答案:

答案 0 :(得分:0)

  1. Capybaras默认断言无法告诉它忽略与选择器匹配的某些元素。

  2. 默认情况下,Capybara无法找到隐藏的元素,如果您通过更改Capybara.ignore_hidden_​​elements选项覆盖了它,则可以在断言中指定:visible选项

    page.assert_no_selector(' a',visible:true)

  3. 可见选项可以采用多个值:

    • true或:visible =>只找到可见元素
    • false或:all =>找到元素,无论其能见度如何
    • :hidden =>只找到不可见的元素

答案 1 :(得分:0)

如果有两个div是相同的,但有一个是隐藏的,那么capybara会自动只查找可见的div。

但是,如果使用选项

选项在capybara的全局设置中具有相反的值
:visible

page.should have_css("ol li", :visible => true)

将强制它仅检查可见的div。

但是,如果使用可见性选项是完全没有,那么可能还有其他方法来判断它是否存在。

使用count方法可以告诉您页面上是否有正确的命名div数:

page.should have_css("ol li", :count => 2)

或者如果你知道div总是如此,那就说第三个:

page.all("ol li")[3]

最后,如果这些div被包含在不同标记的HTML单独的块中 - 您可以在HTML中查找以通过与capybara链接来查找它们:

page.find('#foo').find('.bar')

此信息的良好来源:

http://www.rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Finders#find-instance_method