我发现在行具有可靠属性的单元格中获取文本值很容易,例如。 $browser.tr(:class, "datarow2_sm")
但是,我还需要从表格中的下一个<tr>
获取数据,仅定义为<tr class="">
。
它的HTML内容也没有任何非常独特的东西,说话。
捕获该行的一种不情愿的方法是:
cell1value = $browser.tr(:class, "datarow2_sm").parent[3][1].text
cell2value = $browser.tr(:class, "datarow2_sm").parent[3][2].text.to_f # etc.
但是我不想依赖固定索引 [3] ,因为更宽的表中的这些东西可能会发生变化。除了 .parent 之外,还有像 .sibling ( .next / * .previous *之类的东西,比如在Mechanize中)?也许更喜欢相同类型的节点(tr到另一个tr不是td或DOM中的某些非行节点)?
答案 0 :(得分:3)
您可以使用css邻近兄弟选择器。请注意,Watir-Webdriver目前仅支持元素节点的css选择器。
您将执行以下操作(注意to_subtype是将其转换回TableRow而不是Element):
puts b.element(:css, "tr.datarow2_sm + tr").to_subtype.text
<强>更新强>
如果要获取下一行中的第二个单元格,可以执行以下操作之一:
puts b.element(:css, "tr.datarow2_sm + tr").to_subtype[1].text
puts b.element(:css, "tr.datarow2_sm + tr").td(:index, 1).text
答案 1 :(得分:2)
CSS有一个名为adjacent sibling selector的特殊选择器:
相邻的兄弟选择器具有以下语法:E1 + E2,其中 E2是选择器的主题。选择器匹配E1和E2 在文档树中共享同一个父级,E1紧接在之前 E2,忽略非元素节点(如文本节点和注释)。