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

Capybara: simple way to find elements without particular text

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

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 => 'Text',但我需要的是与相等相反的东西,所以我搜索和测试了,但没有找到是否有像[=12这样简单的东西=]

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

谢谢。

只需将 class 添加到您想要 select 的元素组中,然后查找:

page.find('.class_name')

我同意拉扎。一定要尝试 在您要查找的元素 上设置 class。

如果无论出于何种原因最终证明这是不可能的,这里还有几个选项。

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

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

这不是很容易阅读。但由于您已经将 class 的范围缩小了很多,它可能不会太慢​​。

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 class 绝对更快更容易。尽可能避免文本匹配。