我在 HTML 中有以下两个元素
<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>
我正在尝试使用以下 Capybara 方法查找元素
find("a", :text => "berlin")
上面将返回两个元素,因为它们都包含文本柏林。
有没有办法匹配 Capybara 中的确切文本?
使用正则表达式而不是字符串作为:text
键的值:
find("a", :text => /\ABerlin\z/)
查看Method: Capybara::Node::Finders#all
文档的“选项哈希”部分。
PS:文本匹配区分大小写。您的示例代码实际上引发了一个错误:
find("a", :text => "berlin")
# => Capybara::ElementNotFound:
# Unable to find css "a" with text "berlin"
取决于您使用的 gem 版本
find('a', text: 'Berlin', exact: true)
可能会被弃用。在这种情况下,您将不得不使用
find('a', text: 'Berlin', match: :prefer_exact)
你也可以这样做:
find('a', text: 'Berlin', exact_text: true)
这将找到 CSS。
并且使用 onlyexact: true
而不是exact_text
会向您显示一个消息,该exact
选项仅对 XPATH 有效。
只需使用Capybara 的确切选项:
Capybara.exact = true
我的偏好是使用have_selector
withtext
和exact_text: true
:
expect(body).to have_selector 'a', text: 'Berlin', exact_text: true
要在 capybara 中使用 click_link,您需要在使用它的方法中再添加一个属性。
click_link(link_name, :text => link_name)
这里的link_name是链接的文本值。使用:text关键字,我们指定我们要单击具有与我们的要求完全匹配的文本值的链接。