【发布时间】:2012-07-29 12:46:34
【问题描述】:
我有 2 个可能的 div。
<div class='a b'></div>
和
<div class='c d'></div>
有没有办法检查 div 元素是否有 2 个类 a 和 b?
我使用 Ruby、Capybara 和 XPath 来选择元素,但 css 可以解决问题。
【问题讨论】:
我有 2 个可能的 div。
<div class='a b'></div>
和
<div class='c d'></div>
有没有办法检查 div 元素是否有 2 个类 a 和 b?
我使用 Ruby、Capybara 和 XPath 来选择元素,但 css 可以解决问题。
【问题讨论】:
这个 css 选择器应该可以在 capybara 中工作:
page.has_css?('div.a.b')
哪个会匹配
<div class="a b"> 但不是<div class="a">
【讨论】:
你可以这样做:
page.should have_css('div.a.b')
如果你不使用 rspec,就是这样:
page.has_css?('div.a.b')
【讨论】:
page.has_css?('div.a.b')。
XPath 解决方案:
使用:
div[contains(concat(' ', @class, ' '), ' a ')
and
contains(concat(' ', @class, ' '), ' b ')
]
这会选择上下文节点的任何div 子节点,其class 属性包含"a" 和"b" 类。
如果要求任何选定的div 的class 属性只包含(仅)这两个类而不包含其他类,请使用:
div[contains(concat(' ', @class, ' '), ' a ')
and
contains(concat(' ', @class, ' '), ' b ')
and
string-length(normalize-space(@class)) = 3
]
【讨论】: