1

行に信頼できる属性があるセル内のテキスト値を取得するのは簡単だと思います。$browser.tr(:class, "datarow2_sm")

ただし、テーブルの次のデータからデータを取得する必要もあります。<tr>これは、としてのみ定義されてい<tr class="">ます。そのHTMLコンテンツには、ワティル語で言えば、非常にユニークなものもありません。

その行をキャッチするための1つの気が進まない方法は次のとおりです。

 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のように)のようなものはありますか?おそらく、同じタイプのノード(tdやDOM内の非行ノードではなく別のtrへのtr)を好む人ですか?

4

2 に答える 2

3

CSS隣接兄弟セレクターを使用できます。Watir-Webdriver は現在、要素ノードの css セレクターのみをサポートしていることに注意してください。

次のようにします (to_subtype はそれを Element ではなく TableRow に変換することに注意してください)。

puts b.element(:css, "tr.datarow2_sm + tr").to_subtype.text 

アップデート

その次の行の 2 番目のセルを取得する場合は、次のいずれかを実行できます。

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 に答える