web-dev-qa-db-ja.com

XPath ::次の兄弟を取得

私は次の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番目の「Color Digest」td要素を抽出しようとしています。

私は次のxpathを書いたが、2番目を取得する代わりに2番目のtd要素を取得していない。

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

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

64
add-semi-colons

'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

93
james31rock

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)です。

4
Dhaval Jethava

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

Chrome(Safariの場合もあります)で要素を検査し、xpathを取得するタグを右クリックしてから、xpathをコピーしてその要素を選択できます。

0
guanome