Capybara:找到没有特定文本的元素的简单方法

时间:2015-05-03 08:08:23

标签: capybara

页面上有几个元素,我需要它们的数组,但没有带特定文本的元素。我现在做的是

tabs_quantity = page.all(:css, 'div.class1 ul.tabs li.tab.exist', visible: true)
tabs_quantity.each { |x|
  if x.text != 'Main'
    ...blah-blah-blah...

我只看到“:text =>'文字'到处都是,但我需要的是与平等相反,所以我已经搜索并测试了但是没有发现是否有像

这样简单的东西
tabs_quantity = page.all(:css, 'div.class1 ul.tabs li.tab.exist', visible: true, :text !=> //or "not equal", whatever// 'Main')

感谢。

2 个答案:

答案 0 :(得分:1)

我同意Raza。绝对尝试在您正在寻找的元素上设置一个类。

如果由于某种原因事实证明这是不可能的,那么还有更多的选择。

1)你可以试试正则表达式:

# match text that doesn't contain 'Main'
page.all('li.tab.exist', text: /^(?:(?!Main).)*$/)

这不容易阅读。但是既然你已经把你的课程缩小了很多,那可能不会太慢​​。

2)另一种选择是xpath:

# find li with class of 'exist' and any text except 'Main'
page.all(:xpath, "//li[contains(@class, 'exist') and not(contains(.,'Main'))]" )

这也有点不合适,特别是如果你想要像你原来的css匹配器一样深入。我肯定会随附一条评论。

更多信息:使用css类肯定更快更容易。尽可能避免文本匹配。

答案 1 :(得分:0)

只需将一个类添加到要选择的元素组中,然后使用以下内容添加:

page.find('.class_name')