1

我发现在行具有可靠属性的单元格中获取文本值很容易,例如。$browser.tr(:class, "datarow2_sm")

但是,我还需要从<tr>表中的下一个获取数据,仅定义为<tr class="">. 它的 HTML 内容也没有什么非常独特的东西,wair-speaking。

捕获该行的一种不情愿的方法是:

 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 中的某些非行节点)?

4

2 回答 2

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
于 2012-07-20T20:46:06.113 回答
2

CSS 对此有一个特殊的选择器,称为相邻兄弟选择器

相邻兄弟选择器的语法如下:E1 + E2,其中 E2 是选择器的主题。如果 E1 和 E2 在文档树中共享相同的父级并且 E1 紧接在 E2 之前,则选择器匹配,忽略非元素节点(例如文本节点和注释)。

于 2012-07-20T20:43:40.913 回答