XPath :: Holen Sie sich folgende Geschwister

82

Ich habe folgende HTML-Struktur: Ich versuche, eine robuste Methode zum Extrahieren des zweiten Farbverdauungselements zu erstellen, da es viele dieser Tags im DOM geben wird.

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

Ich versuche, das zweite td-Element "Color Digest" zu extrahieren, das den dekodierten Wert hat.

Ich habe den folgenden xpath geschrieben, aber anstatt den zweiten zu bekommen, bekomme ich nicht das zweite td-Element.

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

Und wenn ich es in td [2] in td [1] ändere, bekomme ich beide Elemente.

Add-Semikolons
quelle

Antworten:

120

Sie sollten nach dem zweiten tr suchen, dessen td gleich 'Color Digest' ist, dann müssen Sie entweder das folgende Geschwister des ersten td im tr oder das zweite td betrachten.

Versuche Folgendes:

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

oder

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

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

james31rock
quelle
Ich benutze Xpath Checker auf Firefox
Add-Semikolons
Ich habe dies zum Testen verwendet. xpathtester.com/saved/b452f721-556c-4e9b-9758-1910b0871d4a
james31rock
1
Vielleicht funktioniert der Xpath Checker nicht? Ich habe es nie benutzt und habe kein Firefox installiert. Der xpath, den ich habe, sollte nur das zweite td-Element zurückgeben, wenn das erste td-Element 'Color Digest' hat
james31rock
Wenn Sie meinen HTML-Code überprüfen, gibt es ein Leerzeichen "Color Digest". Ich habe den von Ihnen gesendeten Link ausprobiert und Sie können sehen, dass beide TD zurückgegeben werden.
Add-Semikolons
1
Ahh ich verstehe, ich werde meine Antwort ändern. Es tut uns leid. Sie sollten nach dem zweiten tr suchen, dessen td gleich 'Color Digest' ist, dann müssen Sie entweder das folgende Geschwister des ersten td im tr oder das zweite td betrachten.
James31 Rock
5

Sie können eine Liste von Elementen mit xPath identifizieren:

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

Dies gibt Ihnen eine Liste von zwei Elementen, als Sie das 2. Element als Ihr beabsichtigtes verwenden können. Zum Beispiel:

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

Jetzt können Sie das 2. Element als beabsichtigtes Element verwenden, nämlich elements.get (1).

Dhaval Jethava
quelle
2

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

In Chrome (möglicherweise auch in Safari) können Sie ein Element untersuchen, dann mit der rechten Maustaste auf das Tag klicken, für das Sie den xpath erhalten möchten, und dann den xpath kopieren, um dieses Element auszuwählen.

FarFigNewton
quelle
2
Ja, ich weiß, dass es bei dieser Funktion Wiederholungen dieser Elemente gibt, anstatt nur eine zu bekommen. Ich möchte einen robusten Ansatz entwickeln.
Add-Semikolons