jac*_*ipe 33 ruby-on-rails capybara
我在请求规范中有以下测试:
page.should have_link('Edit user', :href => edit_users_path(@user))
Run Code Online (Sandbox Code Playgroud)
这将检查索引视图中的特定用户是否具有编辑链接.我想点击相同的链接,例如:
click_link('Edit user', :href => edit_users_path(@user))
Run Code Online (Sandbox Code Playgroud)
不幸的是,click_link不接受选项.
有没有一个好方法,这似乎是一个相当明显的用例?
我应该在表中包含#id <tr>还是<td>执行以下操作:
within(#user_id)
click_link 'Edit user'
end
Run Code Online (Sandbox Code Playgroud)
我不想修改视图只是为了让测试工作.
dia*_*ist 16
您可以使用Capybara的低级界面来执行此操作.尝试:
find("a[href='#{edit_users_path}']").click
Run Code Online (Sandbox Code Playgroud)
wot*_*oto 13
2021年,它会按预期运行
click_link('...', href: '...')
click_link('...')
click_link(href: '...')
Run Code Online (Sandbox Code Playgroud)
jac*_*ipe 11
我最后添加了一个辅助模块 spec/support/selectors.rb
module Selectors
Capybara.add_selector(:linkhref) do
xpath {|href| ".//a[@href='#{href}']"}
end
end
Run Code Online (Sandbox Code Playgroud)
然后在我使用的测试中
find(:linkhref, some_path).click
Run Code Online (Sandbox Code Playgroud)
基于@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
Run Code Online (Sandbox Code Playgroud)
用法示例:
find(:href, 'google')
Run Code Online (Sandbox Code Playgroud)
有什么不同?
好吧,这将找到任何包含“ google”的链接。以下将匹配:
www.google.com
http://google.com
fonts.google.com
something.google.inside.com
Run Code Online (Sandbox Code Playgroud)
此外,它将仅在子代选择器中搜索,因此例如within('header') { find(:href, 'google').click }可以正常工作。
| 归档时间: |
|
| 查看次数: |
29701 次 |
| 最近记录: |