查找具有以特定文本开头的 href 的所有链接

Find all links that have an href that begins with a specific text

我需要在 href../items/ 开头的页面上找到所有链接。例如:

<a href="../items/some-link">Some link title</a>
<a href="../other-link">Other link title</a>
<a href="../items/some-link-2">Some link title 2</a>

我尝试了以下正则表达式,但它不起作用:

review_links = page.find_link('a')[:href] == '%r{^../items/\w+}'

我做错了什么?

您可以使用 CSS 选择器查找所有具有以文本开头的 href 属性的链接:

review_links = page.all('a[href^="../items/"]')
p review_links.map(&:text)
#=> ["Some link title", "Some link title 2"]

请注意,href^= 表示 href 属性以

开头

:link 选择器采用 :href 选项,该选项接受要匹配的正则表达式。所以如果你正在寻找一个单一的结果,你可以这样做

page.find_link(nil, href: /regex to match against/) 

在 Capybara 2.7 中,初始 nil 是必需的,以指示您没有使用将传递给 find_link(link 文本等)的普通定位器,在 Capybara 2.8 中发布时没有必要。注意:正则表达式与 what node['href'] returns 匹配,在大多数驱动程序中它是 href 属性(与属性相对),因此被规范化为完整的 url link 指的是 - http://example.com/abc/def,即使文档中的属性可能只是设置为 /abc/def。如果您实际上正在寻找不止一个结果,那么您可以这样做

page.all(:link, nil, href: /regex to match against/)

如果您只是检查一定数量的匹配 links (3) 是否存在,它将是

expect(page).to have_link(nil, href: /regex to match/, count: 3)