Acceder a elementos de una Tabla con Selenium WebDriver

Acceder a elementos de una Tabla con Selenium WebDriver

Hay momentos en los que necesitamos acceder a elementos (generalmente textos) que se encuentran dentro de las tablas HTML. Sin embargo, es muy raro que un diseñador web proporcione un atributo ID o Name a una determinada celda de la tabla. Por lo tanto, no podemos utilizar los métodos de Selenium WebDriver usuales tales como «By.id()», «By.name()», o «By.cssSelector()». En este caso, la opción más fiable es acceder a ellas mediante el método «By.xpath ()».

Sintaxis del método XPath

Considere el código HTML de abajo.

Tabla HTML

Utilizaremos XPath para obtener el texto interno de la celda que contiene el texto «fourth cell».

NOTA: Guarde el código HTML anterior en el disco C con el nombre «newhtml.html», pues lo necesitaremos más adelante en nuestro tutorial.

Acceder a una tabla

Paso 1 – Establecer el elemento primario (table)

Los localizadores de XPath en WebDriver siempre empiezan con una barra diagonal doble «//» y luego el elemento padre. Dado que estamos tratando con tablas, el elemento padre siempre debe ser la etiqueta <table>. Por lo tanto, la primera parte de nuestro localizador de XPath debe comenzar con «//Table».

Paso 2 – Agregar los elementos secundario

El elemento inmediatamente debajo de <table> es <tbody> así que podemos decir que <tbody> es el «hijo» de <table>. Y también, <table> es el «padre» de <tbody>. Todos los elementos secundarios de XPath se colocan a la derecha de su elemento primario, separados por una barra diagonal «/» como el código que se muestra a continuación.

padre e hijo en acceder tabla

Paso 3 – Agregar predicados

El elemento <tbody> contiene dos etiquetas <tr>. Ahora podemos decir que estas dos etiquetas <tr> son «hijos» de <tbody>. Por lo tanto, podemos decir que <tbody> es el padre de ambos elementos <tr>.

Otra cosa que podemos concluir es que los dos elementos <tr> son hermanos. Los hermanos se refieren a elementos secundarios que tienen el mismo padre.

Para llegar al <td> que deseamos acceder (el que tiene el texto «fourth cell»), primero debemos acceder al segundo <tr> y no al primero. Si simplemente escribimos «//table/tbody/tr», entonces estaremos accediendo a la primera etiqueta <tr>.

Entonces, ¿cómo accedemos a la segunda <tr>? La respuesta a esto es usar predicados.

Los predicados son números o atributos HTML incluidos en un par de corchetes «[]» que distinguen a un elemento secundario de sus hermanos. Puesto que el <tr> que tenemos que tener acceso es el segundo, usaremos «[2]» como el predicado.

obtener predicado en seleniumSi no usamos ningún predicado, XPath tendrá acceso al primer hermano. Por lo tanto, podemos acceder a la primera <tr> usando cualquiera de estos códigos XPath.

acceder a los predicadores

Paso 4 – Agregar los elementos secundarios sucesivos mediante los predicados apropiados

El siguiente elemento al que tenemos que acceder es el segundo <td>. Aplicando los principios que hemos aprendido de los pasos 2 y 3, vamos a finalizar nuestro código XPath para ser como el que se muestra a continuación.

//table/tbody/tr[2]/td[2]

NOTA: Si deseas aprender aún más de XPath te recomiendo XPath en Selenium WebDriver: Tutorial completo

Ahora que tenemos el localizador XPath correcto, ya podemos acceder a la celda que queríamos y obtener su texto interno usando el código de abajo. Se supone que ha guardado el código HTML anterior como «newhtml. html» dentro de su unidad C.

public static void main (String[] args) {
       String baseUrl = "file:///C:/newhtml.html";
       WebDriver driver = new FirefoxDriver();
       
       driver.get(baseUrl);
       String innerText = driver.findElement(By.xpath("//table/tbody/tr[2]/td[2]")).getText();
       System.out.println(innerText);
       driver.quit();
}

resultado acceder a tablas selenium

Esto ha sido todo por este tutorial, espero hayas aprendido a acceder a los elementos de las tablas HTML, si tienes alguna duda escríbeme un comentario y con gusto será resuelta.

Te recomiendo visitar Acceso a los Links con Selenium

No olvides completar el Tutorial Selenium WebDriver

Te recomiendo leer el siguiente articulo: Manejo de tablas dinámicas en Selenium

Compartir artículo

2 Comments

  1. wady maria

    Responder

    como selecciono el primero porque no lo quiere seleccionar en un for ni poniendo:
    //table/tbody/tr
    IWebElement innerText = driver.FindElement(By.XPath(«//table/tbody/tr[1]/td[2]»));

    • julianlujan1

      Responder

      Hola Wady Maria, podrías compartir el HTML de la página que estás intentando seleccionar el elemento? Puede ser que hayan Frame y tengas primero que acceder a uno de esos frame para luego ahí encontrar la tabla.

      Quedo pendiente.

Leave Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.