我试图点击表格单元格中的按钮,该表格单元格的动态名称前缀为button_keep
这是firebug为表格单元指出的唯一路径。
#mergePatientsSelectedTable > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1)
我试图使用以下功能到达那里但却找不到按钮。
b.table(:id => "mergePatientsSelectedTable").tbody{2}.tr{1}.td{2}.table{1}.tbody{1}.tr{1}.td{1}.button(:index => 0).button(:name => /button_keep/).click
我曾尝试在单元格上进行闪存并使用IRB,但它继续给我一个无法找到按钮的断言。
任何建议。谢谢
答案 0 :(得分:0)
您不需要写出整个路径。每个方法/定位器都在所有后代中查找,而不仅仅是直接子项。使用整个路径可以使代码非常脆弱。
那么为什么不只是根据已知属性找到按钮:
b.table(:id => "mergePatientsSelectedTable").button(:name => /button_keep/).click
但是要解释为什么你的解决方案有问题,做tbody{2}
实际上会返回第一个tbody元素(而不是第二个)。 {2}
是一个被忽略的块。
例如,考虑一下html:
<div>hi</div>
<div>bye</div>
您可以看到使用块时返回第一个div:
b.div{2}.text
#=> "hi"
要获得第二个div,您可以使用索引定位器或获取集合的第二个元素:
b.div(:index => 1).text
#=> "bye"
b.divs[1].text
#=> "bye"
所以如果你真的想要完成整个路径,你可以做到:
b.table(:id => "mergePatientsSelectedTable").tbody(:index => 1).tr.td(:index => 1).table.tbody.tr.td.button(:name => /button_keep/).click
请注意:
nth-child
是基于1的索引,而Watir使用基于0的索引。:index => 0
。