我想做一些我认为应该很简单但无法解决的问题。 使用Cucumber和Capybara
在表格中,我想单击同一行中的按钮,但是单击一个不同的单元格。
即。我想找到名为“Bob Perkins”
的同一行中的“Change Role”按钮click_button“更改角色”
我想做点什么
within find("td", text:"Bob Perkins").parent #where this would be the "tr" row
click_link_or_button("Change Role")
但是这给了我一个关于“改变角色”的暧昧匹配。当然,页面上还有更多,但只有其中一个在父节点中应该是...
答案 0 :(得分:1)
在与capybara进行一些游戏后,看起来好像父方法返回整个html文档
e = find "table > thead"
=> #<Capybara::Element tag="thead">
e.parent
=> #<Capybara::Document>
capybara的默认选择器类型是CSS,不支持父选择器 可能值得查看XPath,与XPath一样,您可以执行包含
e = find :xpath, "//table[thead]"
=> #<Capybara::Element tag="table">
e = find :xpath, "//table[thead]", text: "TOTAL"
=> #<Capybara::Element tag="table">
所以看看你的代码你可以试试这个:
e = find :xpath, "//tr[td[contains(text(),'Bob Perkins')]]"
=> #<Capybara::Element tag="tr">
OR
e = find :xpath, "//tr[td]", text: 'Bob Perkins'
=> #<Capybara::Element tag="tr">
所以你应该得到这样的东西
within find(:xpath, "//tr[td[contains(text(),'Bob Perkins')]]") do
click_link_or_button("Change Role")
end
祝你好运。
答案 1 :(得分:1)
我不确定有多少人能熟练使用xpath,但是如果你发现它像我一样混乱,你可以链接查找只在必要时使用xpath。例如:
find("td", text:"Bob Perkins").find(:xpath, '..') # Gives you the TR
答案 2 :(得分:-1)
你几乎接近答案。
更正了一个是:
within(find("td", text:"Bob Perkins").parent){ click_link_or_button("Change Role") }