amj*_*jad 99 ruby regex capybara
我在HTML中有以下两个元素
<a href="/berlin" >Berlin</a>
<a href="/berlin" >Berlin Germany </a>
Run Code Online (Sandbox Code Playgroud)
我试图通过使用以下Capybara方法找到元素
find("a", :text => "berlin")
Run Code Online (Sandbox Code Playgroud)
上面将返回两个元素,因为它们都包含文本柏林.
有没有办法匹配Capybara的确切文字?
pje*_*pje 134
使用正则表达式而不是字符串作为:text键的值:
find("a", :text => /\ABerlin\z/)
Run Code Online (Sandbox Code Playgroud)
查看Method: Capybara::Node::Finders#all 文档的"选项哈希"部分.
PS:文本匹配区分大小写.您的示例代码实际上引发了一个错误:
find("a", :text => "berlin")
# => Capybara::ElementNotFound:
# Unable to find css "a" with text "berlin"
Run Code Online (Sandbox Code Playgroud)
Gab*_*ple 50
取决于您使用的宝石版本
find('a', text: 'Berlin', exact: true)
Run Code Online (Sandbox Code Playgroud)
可能会被弃用.在这种情况下,您将不得不使用
find('a', text: 'Berlin', match: :prefer_exact)
Run Code Online (Sandbox Code Playgroud)
Cam*_*oVA 12
你也可以这样做:
find('a', text: 'Berlin', exact_text: true)
Run Code Online (Sandbox Code Playgroud)
这将为 CSS 找到。
并且使用 onlyexact: true而不是exact_text将向您显示一个消息,该exact选项仅对 XPATH 有效。
我的偏好是使用have_selectorwithtext和exact_text: true:
expect(body).to have_selector 'a', text: 'Berlin', exact_text: true
Run Code Online (Sandbox Code Playgroud)