XPath ::次の兄弟を取得する


85

私は次のHTML構造を持っています:DOM内にこれらのタグの多くがあるため、2番目のカラーダイジェスト要素を抽出するための堅牢なメソッドを構築しようとしています。

<table>
  <tbody>
    <tr bgcolor="#AAAAAA">
    <tr>
    <tr>
    <tr>
    <tr>
      <td>Color Digest </td>
      <td>AgArAQICGQMVBBwTIRQHIwg0GUMURAZTBWQJcwV0AoEDAQ </td>
    </tr>
    <tr>
      <td>Color Digest </td>
      <td>2,43,2,25,21,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, </td>
    </tr>
  </tbody>
</table>

デコードされた値を持つ2番目の「カラーダイジェスト」td要素を抽出しようとしています。

次のxpathを作成しましたが、2番目を取得する代わりに、2番目のtd要素を取得していません。

//td[text() = ' Color Digest ']/following-sibling::td[2]

そして、それをtd [2]からtd [1]に変更すると、両方の要素が得られます。

回答:


124

'Color Digest'に等しいtdを持つ2番目のtrを探す必要があります。次に、trの最初のtdの次の兄弟、または2番目のtdを調べる必要があります。

次のことを試してください。

//tr[td='Color Digest'][2]/td/following-sibling::td[1]

または

//tr[td='Color Digest'][2]/td[2]

http://www.xpathtester.com/saved/76bb0bca-1896-43b7-8312-54f924a98a89


FirefoxでXpathCheckerを使用しています
add-semi-

私はこれを使ってテストしました。xpathtester.com/saved/b452f721-556c-4e9b-9758-1910b0871d4a
james31rock 2012

1
xpathチェッカーが機能しない可能性がありますか?私はそれを使ったことがなく、Firefoxをインストールしていません。私が持っているxpathは、最初のtd要素に「カラーダイジェスト」がある場合にのみ2番目のtd要素を返す必要があります
james31rock 2012

HTMLをチェックすると、スペース「カラーダイジェスト」があります。送信したリンクを試しましたが、両方のTDが返されていることがわかります。
add-semi-colons 2012

1
ああ、なるほど、応答を変更します。ごめんなさい。'Color Digest'に等しいtdを持つ2番目のtrを探す必要があります。次に、trの最初のtdの次の兄弟、または2番目のtdを調べる必要があります。
james31rock 2012

6

xPathを使用して要素のリストを特定することができます。

//td[text() = ' Color Digest ']/following-sibling::td[1]

これにより、2番目の要素を目的の要素として使用できるよりも、2つの要素のリストが表示されます。例えば:

List<WebElement> elements = driver.findElements(By.xpath("//td[text() = ' Color Digest ']/following-sibling::td[1]"))

これで、2番目の要素を目的の要素として使用できます。これはelements.get(1)です。


2

/html/body/table/tbody/tr[9]/td[1]

Chrome(Safariも可能)では、要素を調べてから、xpathを取得するタグを右クリックし、xpathをコピーしてその要素を選択できます。


2
ええ、私は、堅牢なアプローチを構築したいだけでなく、これらの要素が繰り返される機能があることを知っています。
add-semi-colons 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.