Leer una tabla web HTML
Hay ocasiones en las que necesitamos acceder a elementos (generalmente textos) que se encuentran dentro de tablas HTML. Sin embargo, es muy raro que un diseñador web proporcione un atributo de identificación o nombre a una determinada celda de la tabla. Por lo tanto, no podemos utilizar los métodos habituales como "By.id ()", "By.name ()" o "By.cssSelector ()". En este caso, la opción más confiable es acceder a ellos usando el método "By.xpath ()".
En este tutorial, aprenderá:
- Cómo escribir XPath para tabla
- Acceder a tablas anidadas
- Usar atributos como predicados
- Atajo: use el elemento Inspeccionar para acceder a tablas en selenio
Cómo escribir XPath para tabla
Considere el código HTML a continuación.
Usaremos XPath para obtener el texto interno de la celda que contiene el texto "cuarta celda".
Paso 1: establecer el elemento principal (tabla)
Los localizadores XPath en WebDriver siempre comienzan con una barra diagonal doble "//" y luego siguen el elemento principal . Dado que se trata de tablas, el elemento padre siempre debe ser la etiqueta
. Por lo tanto, la primera parte de nuestro localizador XPath debería comenzar con "// tabla".Paso 2: agregue los elementos secundarios
El elemento inmediatamente debajo de
Paso 3: agregar predicados
El elemento
contiene dos etiquetas . Ahora podemos decir que estas dos etiquetas son "hijos" de . En consecuencia, podemos decir que es el padre de ambos elementos .Otra cosa que podemos concluir es que los dos elementos
son hermanos. Los hermanos se refieren a elementos secundarios que tienen el mismo padre .Para llegar al
y no al primero. Si simplemente escribimos "// table / tbody / tr", estaremos accediendo a la primera etiqueta .Entonces, ¿cómo accedemos al segundo
entonces? La respuesta a esto es usar Predicados .Los predicados son números o atributos HTML encerrados en un par de corchetes "[]" que distinguen un elemento hijo de sus hermanos . Dado que el
al que necesitamos acceder es el segundo, usaremos "[2]" como predicado.Si no usamos ningún predicado, XPath accederá al primer hermano. Por lo tanto, podemos acceder al primer
usando cualquiera de estos códigos XPath.Paso 4: agregue los elementos secundarios sucesivos utilizando los predicados adecuados
El siguiente elemento al que debemos acceder es el segundo
, por lo que nuestro XPath debería ser como se muestra a continuación.Recuerde que cuando colocamos el código XPath en Java, debemos usar el carácter de escape barra inclinada hacia atrás "\" para las comillas dobles en ambos lados de "270" para que el argumento de cadena de By.xpath () no termine prematuramente .
Ahora estamos listos para acceder a esa celda usando el siguiente código.
public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";Controlador WebDriver = nuevo FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (Por.xpath ("// tabla [@width = \" 270 \ "] / tbody / tr [4] / td")).getText ();System.out.println (innerText);driver.quit ();}
Atajo: use el elemento Inspeccionar para acceder a tablas en selenio
Si el número o atributo de un elemento es extremadamente difícil o imposible de obtener, la forma más rápida de generar el código XPath es usando Inspect Element.
Considere el siguiente ejemplo de la página de inicio de Mercury Tours.
Paso 1
Utilice Firebug para obtener el código XPath.
Paso 2
Busque el primer elemento principal de la "tabla" y elimine todo lo que está a la izquierda.
Paso 3
Prefije la parte restante del código con doble barra inclinada "//" y cópielo en su código de WebDriver.
El código de WebDriver a continuación podrá recuperar con éxito el texto interno del elemento al que estamos accediendo.
public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";Controlador WebDriver = nuevo FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (Por.xpath ("// tabla / tbody / tr / td [2]"+ "// tabla / tbody / tr [4] / td /"+ "tabla / tbody / tr / td [2] /"+ "tabla / tbody / tr [2] / td [1] /"+ "tabla [2] / tbody / tr [3] / td [2] / font")).getText ();System.out.println (innerText);driver.quit ();}
Resumen
- By.xpath () se usa comúnmente para acceder a los elementos de la tabla.
- Si el elemento está escrito profundamente dentro del código HTML de modo que el número a usar para el predicado sea muy difícil de determinar, podemos usar el atributo único de ese elemento en su lugar.
- Los atributos se utilizan como predicados prefijándolos con el símbolo @.
- Utilice el elemento Inspeccionar para acceder a tablas en selenio