114

我在 HTML 中有以下两个元素

<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>

我正在尝试使用以下 Capybara 方法查找元素

find("a", :text => "berlin")

上面将返回两个元素,因为它们都包含文本柏林。

有没有办法匹配 Capybara 中的确切文本?

4

6 回答 6

145

使用正则表达式而不是字符串作为: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"
于 2012-12-14T19:01:09.530 回答
61

取决于您使用的 gem 版本

find('a', text: 'Berlin', exact: true)

可能会被弃用。在这种情况下,您将不得不使用

find('a', text: 'Berlin', match: :prefer_exact)
于 2015-04-23T19:06:13.463 回答
15

你也可以这样做:

find('a', text: 'Berlin', exact_text: true)

这将找到 CSS。

并且使用 onlyexact: true而不是exact_text会向您显示一个消息,该exact选项仅对 XPATH 有效。

于 2020-03-02T15:43:58.320 回答
7

只需使用Capybara 的确切选项

Capybara.exact = true
于 2014-01-31T18:03:39.693 回答
5

我的偏好是使用have_selectorwithtextexact_text: true

expect(body).to have_selector 'a', text: 'Berlin', exact_text: true
于 2019-06-13T15:31:54.477 回答
0

要在 capybara 中使用 click_link,您需要在使用它的方法中再添加一个属性。

click_link(link_name, :text => link_name)

这里的link_name是链接的文本值。使用:text关键字,我们指定我们要单击具有与我们的要求完全匹配的文本值的链接。

于 2018-12-13T05:48:42.040 回答