我在请求规范中进行了以下测试:
page.should have_link('Edit user', :href => edit_users_path(@user))
这将检查索引视图中的特定用户是否具有编辑链接。 我想点击相同的链接,例如:
click_link('Edit user', :href => edit_users_path(@user))
不幸的是,click_link不接受选项。
有没有一种好方法可以做到这一点,这似乎是一个相当明显的用例?
我是否应该在表<tr>
或<td>
中加入#id并执行以下操作:
within(#user_id)
click_link 'Edit user'
end
我不想修改视图只是为了让测试工作。
答案 0 :(得分:40)
您可以使用find find(:xpath, "//a[@href='/foo']").click
答案 1 :(得分:16)
您可以使用Capybara的低级界面来执行此操作。尝试:
find("a[href='#{edit_users_path}']").click
答案 2 :(得分:11)
我最终在spec/support/selectors.rb
module Selectors
Capybara.add_selector(:linkhref) do
xpath {|href| ".//a[@href='#{href}']"}
end
end
然后在测试中我使用
find(:linkhref, some_path).click
答案 3 :(得分:4)
根据@jackpipe的答案(以及我之前的经验),我构建了自己的Capybara选择器,这里是辅助模块的代码(spec/support/selectors.rb
):
module Selectors
# find(:href, 'google.com')
Capybara.add_selector(:href) do
xpath {|href| XPath.descendant[XPath.attr(:href).contains(href)] }
end
end
用法示例:
find(:href, 'google')
有什么区别?
这将找到包含&#39; google&#39;的任何链接。以下内容将匹配:
www.google.com
http://google.com
fonts.google.com
something.google.inside.com
它只会在后代选择器中进行搜索,例如within('header') { find(:href, 'google').click }
工作正常。
答案 4 :(得分:1)
将第一个参数留空似乎对我有用......
page.should have_link("", :href=>edit_comment_path(@comment))
答案 5 :(得分:1)
在 2021 年它会按预期工作 ?
click_link('...', href: '...')
click_link('...')
click_link(href: '...')