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 绝对更快更容易。尽可能避免文本匹配。
页面上有几个元素,我需要它们的数组,但没有包含特定文本的元素。我现在做的是
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 绝对更快更容易。尽可能避免文本匹配。