我需要找到页面上 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+}'
我做错了什么?
最佳答案
:link
选择器接受一个 :href
选项,该选项接受要匹配的正则表达式。所以如果你正在寻找一个单一的结果,你可以这样做
page.find_link(nil, href: /regex to match against/)
在 Capybara 2.7 中,初始 nil 是必需的,以指示您没有使用将传递给 find_link(链接文本等)的普通定位器,在 Capybara 2.8 中发布时,它不是必需的。注意:正则表达式与 node['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)
关于ruby-on-rails - 查找具有以特定文本开头的 href 的所有链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37597476/