我需要在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+}'
我做错了什么?
答案 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
属性