我在HTML中有以下两个元素
<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>
我试图通过使用以下的Capybara方法找到元素
find("a", :text => "berlin")
上面将返回两个元素,因为它们都包含文本柏林。
有没有办法匹配Capybara中的确切文字?
答案 0 :(得分:132)
使用正则表达式而不是字符串作为:text
键的值:
find("a", :text => /\ABerlin\z/)
查看Method: Capybara::Node::Finders#all
documentation。
PS:文本匹配区分大小写。您的示例代码实际上会引发错误:
find("a", :text => "berlin")
# => Capybara::ElementNotFound:
# Unable to find css "a" with text "berlin"
答案 1 :(得分:47)
取决于您使用的宝石版本
find('a', text: 'Berlin', exact: true)
可能已弃用。在这种情况下,你必须使用
find('a', text: 'Berlin', match: :prefer_exact)
答案 2 :(得分:7)
您也可以这样做:
find('a', text: 'Berlin', exact_text: true)
这将在CSS中找到。
仅使用exact: true
而不是exact_text
会向您显示消息exact
选项仅对XPATH有效。
答案 3 :(得分:3)
Capybara.exact = true
答案 4 :(得分:0)
要在水豚中使用click_link,您需要在使用它的方法中再添加一个属性。
click_link(link_name, :text => link_name)
链接名称是链接的文本值。 使用:text 关键字,我们指定我们要单击文本值与我们的要求完全匹配的链接。
答案 5 :(得分:0)
我更喜欢将have_selector
与text
和exact_text: true
结合使用:
expect(body).to have_selector 'a', text: 'Berlin', exact_text: true