XPath :: Obtener siguiente hermano

82

Tengo la siguiente estructura HTML: estoy tratando de crear un método sólido para extraer el segundo elemento de resumen de color, ya que habrá muchas de estas etiquetas dentro del DOM.

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

Estoy tratando de extraer el segundo elemento td "Color Digest" que tiene el valor decodificado.

Escribí el siguiente xpath pero en lugar de obtener el segundo, no obtengo el segundo elemento td.

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

Y cuando lo cambio a td [2] a td [1] obtengo ambos elementos.

añadir punto y coma
fuente

Respuestas:

120

Debería buscar el segundo tr que tiene el td que es igual a 'Colour Digest', luego debe mirar al siguiente hermano del primer td en el tr, o al segundo td.

Intente lo siguiente:

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

o

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

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

james31rock
fuente
Estoy usando Xpath Checker en Firefox
agregar punto y coma
1
tal vez el verificador xpath no funciona? Nunca lo usé y no tengo Firefox instalado. El xpath que tengo solo debería devolver el segundo elemento td, cuando el primer elemento td tiene 'Colour Digest'
james31rock
Si revisa mi HTML, hay un espacio "Color Digest". Probé el enlace que envió y puede ver que ambos TD están siendo devueltos.
añadir punto y coma
1
Ahh ya veo, voy a cambiar mi respuesta. Lo siento. Debería buscar el segundo tr que tiene el td que es igual a 'Colour Digest', luego debe mirar al siguiente hermano del primer td en el tr, o al segundo td.
james31rock
5

Puede ir a identificar una lista de elementos con xPath:

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

Esto le dará una lista de dos elementos, de los que puede usar el segundo elemento como el que desea. Por ejemplo:

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

Ahora, puede usar el segundo elemento como su elemento deseado, que es elements.get (1)

Dhaval Jethava
fuente
2

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

En Chrome (posiblemente Safari también) puede inspeccionar un elemento, luego hacer clic derecho en la etiqueta para la que desea obtener el xpath, luego puede copiar el xpath para seleccionar ese elemento.

FarFigNewton
fuente
2
Sí, sé que la función es la repetición de estos elementos en lugar de simplemente obtener uno, quiero construir un enfoque sólido.
añadir punto y coma