2012-07-20 79 views
1

我发现很容易得到行内具有可靠属性的单元格内的文本值,例如。 $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?也许一个喜欢相同类型的节点(tr到另一个tr而不是td或DOM中的某个非行节点)?

回答

3

您可以使用css邻接兄弟选择器。请注意,Watir-Webdriver目前仅支持元素节点的css选择器。

你会做如下(注意,to_subtype是将其转换回的TableRow而不是元素):如果你想在第二单元

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 
+0

因此,只抓取第二个单元格的相邻行的值,是否像这样?:'cell2value = $ browser.element(:css,“tr.datarow2_sm + tr”)。to_subtype [2] .text' – Marcos 2012-07-20 21:04:34

+1

Watir- webdriver是从零开始的索引,所以如果你想要第二个单元格,它实际上是索引1.如果你只关心单元格,实际上可以跳过to_subtype。答案已更新。 – 2012-07-20 21:18:15

2

CSS有这个特殊的选择称为adjacent sibling selector

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

+0

这更好地描述了我所想到的“相同类型” – Marcos 2012-07-20 21:06:22