Cómo manejar la tabla web en Selenium

⚡ Resumen inteligente

Selenium El manejo de tablas web permite a los ingenieros de control de calidad leer datos tabulares de filas y columnas HTML usando XPath, CSS y Selenium 4 localizadores relativos. Este artículo analiza tablas estáticas, tablas anidadas, predicados de atributos y técnicas de IA para cuadrículas dinámicas.

  • 🧱 Anatomía de XPath: Cada localizador de tabla comienza con //table y profundiza en tbody, tr y td usando predicados.
  • 🔁 Filas dinámicas: findElements devuelve una lista de elementos web para que los bucles puedan contar filas y leer celdas en tiempo de ejecución.
  • 🪄 Selenium 4: Los localizadores relativos situados arriba, abajo y cerca simplifican la selección de células objetivo alrededor de un elemento de anclaje conocido.
  • 🧠 Localizadores de IA: Las herramientas de autorreparación detectan los cambios de columna y recuperan la identidad de las filas sin necesidad de editar manualmente las expresiones XPath.
  • 🛠️ Inspeccionar acceso directo: Las herramientas para desarrolladores del navegador copian una ruta XPath completa que se puede recortar para dejar solo la primera tabla, lo que aumenta la fiabilidad.

Selenium Ejemplo de XPath para tabla web

¿Qué es una tabla web en Selenium?

A Tabla web in Selenium Es un elemento web que se utiliza para la representación tabular de datos o información. Los datos mostrados pueden ser estáticos o dinámicos. Se accede a las celdas y filas de una tabla web mediante métodos de elementos web combinados con localizadores. Un ejemplo típico es la cuadrícula de especificaciones del producto que se muestra en la página de un producto de comercio electrónico.

Lectura de una tabla web HTML

En muchas ocasiones, los evaluadores necesitan acceder a elementos, generalmente valores de texto, ubicados dentro de tablas HTML. Sin embargo, los diseñadores web rara vez proporcionan un atributo `id` o `name` a las celdas individuales. Por lo tanto, métodos como `By.id()`, `By.name()` o `By.cssSelector()` rara vez funcionan. En este caso, la opción más confiable es `By.xpath()`, ya que recorre las relaciones padre-hijo dentro de la etiqueta de tabla.

Cómo manejar la tabla web en Selenium

Considere el código HTML siguiente para manejar tablas web en Selenium.

Cómo escribir XPath para una tabla en Selenium

Usaremos XPath para obtener el texto interno de la celda que contiene el texto "cuarta celda".

Cómo escribir XPath para una tabla en Selenium

Paso 1: configurar el elemento principal (tabla)

Los localizadores XPath en WebDriver siempre comienzan con una doble barra inclinada “//” seguida del elemento padre.. Dado que estamos tratando con tablas web en Selenium, el elemento padre siempre debe ser el etiqueta. La primera parte de nuestra Selenium Por lo tanto, el localizador de tabla XPath debe comenzar con “//table”.

Selenium Ejemplo de tabla web

Paso 2: agregue los elementos secundarios

El elemento que se encuentra directamente debajo es , entonces es el hijo de . En cambio, es el padre de . Todos los elementos secundarios en XPath se colocan a la derecha de su elemento principal, separados por una barra inclinada “/” como se muestra a continuación.

Selenium Ejemplo de tabla web

Paso 3: agregar predicados

El el elemento contiene dos etiquetas. Estas dos Las etiquetas son hijos de , entonces es el padre de ambos. Los dos Los elementos son hermanos. Los hermanos son elementos hijos que comparten el mismo padre..

Para llegar al que contiene “cuarta celda”, primero debemos acceder a la second , no el primero. Escribir solo “//table/tbody/tr” apuntaría al primero. etiqueta.

Entonces, ¿cómo accedemos al segundo? ¿La respuesta es usar? Predicados. Los predicados son números o atributos HTML encerrados entre corchetes “[ ]” que distinguen un elemento hijo de sus elementos hermanos.. Dado que la fila que necesitamos es la segunda, usamos “[2]” como predicado.

 Selenium Ejemplo de tabla web

Si omitimos el predicado, XPath devuelve el primer hermano. Por lo tanto, cualquiera de los códigos XPath a continuación llegará al primero. .

Selenium Tabla web usando XPath

Paso 4: agregue los elementos secundarios sucesivos utilizando los predicados apropiados

El siguiente elemento que necesitamos es el segundo Aplicando las reglas de los pasos 2 y 3, llegamos a la ruta XPath que se muestra a continuación.

Tabla web en Selenium usando XPath

Ahora que tenemos el localizador XPath correcto, podemos acceder a la celda y leer su texto interno usando el código que aparece a continuación. Esto supone que has guardado la página HTML como “newhtml.html” en tu unidad C.

Tabla web en Selenium usando XPath

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/write-xpath-table.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();
}

Tabla web en Selenium usando XPath

Acceder a tablas anidadas

Los mismos principios se aplican a las tablas anidadas. Las tablas anidadas son tablas colocadas dentro de otra tabla.. A continuación se muestra un ejemplo.

Cómo acceder a tablas anidadas en Selenium

Para acceder a la celda con el texto “4-5-6” utilizando las ideas de padre/hijo y predicado de la sección anterior, podemos componer la ruta XPath que se muestra a continuación.

Cómo acceder a tablas anidadas en Selenium

El código WebDriver que se muestra a continuación recupera el texto interno de la celda seleccionada.

Accediendo a tablas anidadas en Selenium

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/accessing-nested-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

El siguiente resultado confirma que se accedió correctamente a la tabla interna.

Accediendo a tablas anidadas en Selenium

Usar atributos como predicados

Si el elemento se encuentra en lo profundo del HTML, donde contar los elementos hermanos se vuelve complicado, podemos usar el atributo único de ese elemento en su lugar.

En el ejemplo siguiente, la celda “Nueva York a Chicago” está enterrada muy adentro de la Mercury Página de inicio de excursiones.

Selenium Ejemplo de tabla web usando atributos como predicados

Selenium Ejemplo de tabla web usando atributos como predicados

Podemos usar el atributo único de la tabla (width=”270″) como predicado. Los atributos se utilizan como predicados anteponiéndolos con el símbolo @En el ejemplo anterior, la celda “Nueva York a Chicago” se encuentra en la primera del cuarto , por lo que nuestra ruta XPath debería verse como la que se muestra a continuación.

Selenium Ejemplo de tabla web con atributos como predicados

Recuerda que cuando coloques el XPath dentro Java, escapa las comillas dobles alrededor de “270” con una barra invertida para que la cadena By.xpath() no se termine prematuramente.

Selenium Ejemplo de tabla web con atributos como predicados

Ahora estamos listos para acceder a esa celda usando el siguiente código.

Selenium Ejemplo de tabla web con atributos como predicados

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table[@width=\"270\"]/tbody/tr[4]/td"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Selenium Ejemplo de tabla web con atributos como predicados

Acceso directo: utilice el elemento Inspeccionar para acceder a tablas en Selenium

Si resulta difícil obtener el índice o atributo de un elemento, la forma más rápida de generar la ruta XPath es utilizando la función Inspeccionar elemento de las herramientas para desarrolladores de los navegadores modernos.

Considere el siguiente ejemplo de la Mercury Página de inicio de excursiones.

Selenium Ejemplo de tabla web con atributos como predicados

Paso 1

Haz clic con el botón derecho en la celda de destino y selecciona Inspeccionar para ver la ruta DOM; a continuación, copia la ruta XPath completa.

Selenium Ejemplo de tabla web con atributos como predicados

Paso 2

Busque el primer elemento principal "tabla" y elimine todo lo que esté a su izquierda.

Selenium Ejemplo de tabla web con atributos como predicados

Paso 3

Anteponga al resto de la ruta XPath una doble barra inclinada “//” y cópiela en su código WebDriver.

Selenium Ejemplo de tabla web con atributos

El código WebDriver que se muestra a continuación recupera el texto interno del elemento anidado profundamente.

Selenium Ejemplo de tabla web con atributos

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table/tbody/tr/td[2]"
        + "//table/tbody/tr[4]/td/"
        + "table/tbody/tr/td[2]/"
        + "table/tbody/tr[2]/td[1]/"
        + "table[2]/tbody/tr[3]/td[2]/font"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Cómo contar filas y columnas en una tabla web dinámica

Las tablas web dinámicas, como los paneles de control o los resultados de búsqueda, muestran un número diferente de filas en cada carga. Para manejarlas, utilice findElements para traer cada en una lista, luego itera para leer cada celda. El fragmento a continuación cuenta las filas y lee cada celda en una tabla cuyo ID es "clientes".

List<WebElement> rows = driver.findElements(
    By.xpath("//table[@id='customers']//tr"));
System.out.println("Total rows: " + rows.size());

for (int i = 1; i <= rows.size(); i++) {
    List<WebElement> cells = driver.findElements(
        By.xpath("//table[@id='customers']//tr[" + i + "]/td"));
    for (WebElement cell : cells) {
        System.out.println(cell.getText());
    }
}

Envuelva el localizador en un WebDriverWait con visibilityOfAllElementsLocatedBy cuando la tabla se carga mediante AJAX. Esto evita referencias a elementos obsoletos en cuadrículas de renderizado lento.

Selenium 4 Localizadores relativos para tablas web

Selenium 4 introdujo localizadores relativos que apuntan a elementos por posición visual. Son útiles cuando los índices XPath se rompen porque las filas se reordenan. Los métodos above(), below(), toLeftOf(), toRightOf(), y near() Todos aceptan un elemento web de anclaje.

import static org.openqa.selenium.support.locators.RelativeLocator.with;

WebElement emailHeader = driver.findElement(By.xpath("//th[text()='Email']"));
WebElement emailCell = driver.findElement(
    with(By.tagName("td")).below(emailHeader));
System.out.println(emailCell.getText());

Los localizadores relativos se mantienen legibles cuando cambia el orden de las columnas. Combínelos con esperas explícitas para obtener los mejores resultados en páginas basadas en datos.

Herramientas de IA para el manejo de tablas web dinámicas

Las plataformas de prueba asistidas por IA reducen el mantenimiento de los localizadores en cuadrículas que cambian con frecuencia. Herramientas como Testim, Mabel, y Funcionalizar Utilizan visión artificial y modelos DOM para detectar desplazamientos de columnas y localizadores autorreparables. Identifican las filas mediante el texto del encabezado y la similitud de las celdas, en lugar de índices XPath fijos.

Por puro Selenium proyectos, bibliotecas como Healenium Envuelve el WebDriver y reescribe los localizadores defectuosos en tiempo de ejecución. Combina estas herramientas con WebDriverWait para mantener estables los scripts de tablas dinámicas sin tener que reescribir los selectores después de cada cambio en la interfaz de usuario.

Resumen

  • By.xpath() es la forma más confiable de acceder a las celdas de una tabla web en Selenium.
  • Si resulta difícil contar los hermanos, utilice un atributo único como predicado, precedido por el símbolo @.
  • findElements devuelve una lista. que admite el conteo de filas en tablas dinámicas.
  • Selenium Cuatro localizadores relativos (arriba, abajo, cerca) reducen la dependencia de la ruta XPath posicional.
  • La función Inspeccionar elemento en DevTools acelera la generación de XPath para celdas profundamente enterradas.
  • Herramientas de IA como Testim, Mabl y Healenium son localizadores de autorreparación para cuadrículas cambiantes.

Preguntas Frecuentes

Una tabla web en Selenium Es un elemento web que muestra datos tabulares en filas y columnas. Puede ser estático o dinámico. Los evaluadores acceden a sus celdas mediante métodos de elementos web combinados con XPath o localizadores CSS, ya que las tablas rara vez exponen identificadores únicos en las celdas individuales.

La mayoría de las celdas de tabla no tienen un atributo de ID o nombre, por lo que By.id() y By.name() no funcionarán. XPath recorre la estructura padre-hijo de los elementos table, tbody, tr y td, lo que lo convierte en el localizador más fiable para las celdas.

Utilice driver.findElements(By.xpath(“//table[@id='tbl']//tr”)).size() para contar filas y //table[@id='tbl']//tr[1]/td para contar columnas. El método findElements devuelve una lista. que admite size() para totales de filas rápidos.

Selenium La versión 4 introdujo localizadores relativos como above(), below(), toLeftOf(), toRightOf() y near(). Estos ayudan a seleccionar celdas ubicadas alrededor de una celda de referencia conocida, lo cual resulta útil cuando los índices XPath cambian en tablas dinámicas.

Recorre las filas con findElements y luego lee cada celda con getText(). Construye XPath dinámicamente usando concatenación de cadenas como //tr[“+i+”]/td[“+j+”]. Espera a que la tabla se cargue con WebDriverWait antes de leer los valores.

Sí. Herramientas impulsadas por IA como TestimMabl y Functionize utilizan visión artificial y modelos DOM para detectar los límites de las tablas, inferir los encabezados y corregir automáticamente los localizadores cuando cambian las columnas. Esto reduce el mantenimiento de XPath para los paneles dinámicos.

Los modelos de IA aprenden patrones de filas a partir de ejecuciones anteriores y comparan celdas mediante la similitud de texto en lugar de índices fijos. Cuando una fila se mueve o una columna se reordena, el localizador de IA sigue encontrando el objetivo sin necesidad de reescribir la ruta XPath.

findElement devuelve un único WebElement y lanza NoSuchElementException si no existe. findElements devuelve una lista. y devuelve una lista vacía si no se encuentra ninguna coincidencia. Utilice findElements cuando busqueping sobre filas o columnas de la tabla.

Resumir este post con: