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

标签 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>

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

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/

相关文章:

ruby-on-rails - Rails Devise 检查用户是否未登录

ruby - 为什么 monkeypatching Hash.new 不起作用?

ruby - 简单的问题 : Read file, 在 Ruby 中反转它并写入另一个文件

ruby-on-rails - 如何使用 Cucumber 测试非 Ruby、非 Rack API

ruby-on-rails - ruby rails : Observe model changes from controller action

ruby-on-rails - Rails 使用 post 而不是 put 生成更新表单

ruby-on-rails - CarrierWave - 仅删除版本,而非原始版本

Ruby - 转义正则表达式字符的简单方法

ruby - 如何访问使用 letter_opener gem 打开的电子邮件中的链接

javascript - 运行 Cucumber 测试时禁用 JavaScript