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

时间:2016-06-02 16:35:08

标签: ruby-on-rails ruby capybara capybara-webkit

我需要在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>

我尝试了以下Regexp,但它无效:

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

我做错了什么?

2 个答案:

答案 0 :(得分:3)

:link选择器采用:href选项,接受匹配的正则表达式。因此,如果您正在寻找单一结果,那么

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

在Capybara 2.7中,初始nil需要表明你没有使用传递给find_link的正常定位器(链接文本等),在Capybara 2.8中发布它时没有必要。注意:正则表达式与节点['href']返回的节点匹配,在大多数驱动程序中返回的是href属性(与属性相对),因此归一化为链接所指的完整URL - http://example.com/abc/def即使文档中的属性可以设置为/ abc / def。如果您实际上正在寻找多个结果,那么您可以

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

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

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

答案 1 :(得分:1)

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

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

请注意,href^=表示以{。

开头的href属性