Manejo de tablas web dinámicas con Selenium WebDriver

Tabla de contenido:

Anonim

Hay dos tipos de tablas HTML publicadas en la web:

  1. Tablas estáticas : los datos son estáticos, es decir, el número de filas y columnas es fijo.
  2. Tablas dinámicas : los datos son dinámicos, es decir, la cantidad de filas y columnas NO son fijas.

Ahora, aprenderemos cómo manejar una tabla dinámica en Selenium:

A continuación se muestra un ejemplo de una tabla web dinámica en Selenium for Sales. Según los filtros de fecha de entrada, se modificará el número de filas. Entonces, es de naturaleza dinámica.

Manejar tablas estáticas es fácil, pero manejar tablas dinámicas en Selenium es un poco difícil ya que las filas y columnas no son constantes.

En este tutorial, aprenderá:

  • Uso de X-Path para localizar elementos de tabla web
  • Ejemplo: obtener el número de filas y columnas de Dynamic WebTable
  • Ejemplo: obtener el valor de celda de una fila y columna en particular de la tabla dinámica
  • Ejemplo: obtener el máximo de todos los valores en una columna de tabla dinámica
  • Ejemplo: obtener todos los valores de una tabla dinámica

Uso de X-Path para localizar elementos de tabla web

Antes de ubicar el elemento web, primero entendamos-

¿Qué es un elemento web?

Los elementos web no son más que elementos HTML como cuadro de texto, botones de opción desplegables, botones de envío, etc. Estos elementos HTML están escritos con una etiqueta de inicio y terminan con una etiqueta de fin .

Por ejemplo,

Mi primer documento HTML

.

Pasos para obtener X-path del elemento web que queremos ubicar.

Paso 1) En Chrome, vaya a http://demo.guru99.com/test/web-table-element.php

Paso 2) Haga clic con el botón derecho en el elemento web cuya ruta x se va a buscar. En nuestro caso, haga clic derecho en "Compañía" Seleccione la opción Inspeccionar. Aparecerá la siguiente pantalla:

Paso 3) Haga clic con el botón derecho en el elemento web resaltado> Seleccione Copiar -> Opción Copiar x-path.

Paso 4) Utilice la ruta X copiada "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" en Selenium WebDriver para ubicar el elemento.

Ejemplo: obtener el número de filas y columnas de Dynamic WebTable

Si bien el manejo dinámico de tablas web en Selenium, no podemos predecir su número de filas y columnas.

Usando el controlador web de Selenium, podemos encontrar

  • Número de filas y columnas de la tabla web en Selenium
  • Datos de la fila X o de la columna Y.

A continuación se muestra el programa para obtener el número total de filas y columnas para manejar la tabla web en Selenium:

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;public class Noofrowsandcols {public static void main (String [] args) lanza ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nuevo ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");// No de columnasLista  col = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("El número de columnas son: + col.size ());// No de filasLista  filas = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("El número de filas es: + rows.size ()); wd.close (); }}  

Explicación del código:

  • Aquí primero hemos declarado el objeto del controlador web "wd" y lo hemos inicializado en el controlador Chrome.
  • Usamos List para el número total de columnas en "col".
  • Los comandos findElements devuelven una lista de TODOS los elementos que coinciden con el localizador especificado
  • usando findElements y X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th obtenemos todas las columnas
  • Del mismo modo, repetimos el proceso para las filas.

Producción:

Ejemplo: obtener el valor de celda de una fila y columna en particular de la tabla dinámica

Supongamos que necesitamos la fila de la tabla y los datos de su segunda celda. Consulte la tabla a continuación.

En la tabla anterior, los datos se actualizan periódicamente después de un período de tiempo. Los datos que intente recuperar serán diferentes a los de la captura de pantalla anterior. Sin embargo, el código sigue siendo el mismo. Aquí hay un programa de muestra para obtener los datos de la fila y la columna.

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;import java.util.concurrent.TimeUnit;public class RowandCell {public static void main (String [] args) lanza ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nuevo ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");wd.manage (). timeouts (). implicitlyWait (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName ("tabla"));// Para encontrar la tercera fila de la tablaWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));String rowtext = tableRow.getText ();System.out.println ("Tercera fila de la tabla: + texto de fila);// para obtener los datos de la segunda columna de la tercera filaWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));Cadena valueIneed = cellIneed.getText ();System.out.println ("El valor de la celda es: + valueIneed);wd.close ();}}

Explicación del código:

  • La tabla se ubica utilizando la propiedad del localizador "nombre de etiqueta".
  • Usando XPath "// * [@ id = \" leftcontainer \ "] / mesa / tbody / tr [3]" encontrar la 3 ª función de fila y obtiene su texto usando getText ()
  • Usando Xpath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]" encuentre la segunda celda en la fila y obtenga su texto usando la función getText ()

Salida :

Ejemplo: obtener el máximo de todos los valores en una columna de tabla dinámica

En este ejemplo, obtendremos el máximo de todos los valores en una columna en particular.

Consulte la siguiente tabla:

Aqui esta el codigo

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;import java.text.NumberFormat;public class MaxFromTable {public static void main (String [] args) lanza ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nuevo ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");String max;doble m = 0, r = 0;//No. de columnasLista  col = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("El número total de columnas son: + col.size ());// No de filasLista  filas = wd.findElements (By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println ("El número total de filas es: + rows.size ()); for (int i = 1; i  r) {r = m; }} System.out.println ("El precio máximo actual es: + r); }}  

Explicación del código:

  • Usando el controlador de Chrome, ubicamos la tabla web y obtenemos el número total de filas usando XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
  • Usando el ciclo for, iteramos a través del número total de filas y obtenemos los valores uno por uno. Para obtener la siguiente fila usamos (i + 1) en XPath
  • Comparamos el valor antiguo con el nuevo valor y el valor máximo se imprime al final del ciclo for

Producción

Ejemplo: obtener todos los valores de una tabla dinámica

Considere la siguiente tabla http://demo.guru99.com/test/table.html

El número de columnas para cada fila es diferente.

Aquí las filas número 1, 2 y 4 tienen 3 celdas, y la fila número 3 tiene 2 celdas y la fila número 5 tiene 1 celda.

Necesitamos obtener los valores de todas las celdas.

Aquí está el código:

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import java.util.concurrent.TimeUnit;importar org.openqa.selenium.chrome.ChromeDriver;public class NofRowsColmns {public static void main (String [] args) lanza ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nuevo ChromeDriver ();wd.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// Para ubicar tabla.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Para ubicar filas de tabla.Lista  rows_table = mytable.findElements (By.tagName ("tr"));// Calcular el no de filas en la tabla.int número_file = tabla_file.tamaño ();// El bucle se ejecutará hasta la última fila de la tabla.para (int fila = 0; fila  Columns_row = rows_table.get (fila) .findElements (By.tagName ("td"));// Calcular el no de columnas (celdas). En esa fila específica.int column_count = Columns_row.size ();System.out.println ("Número de celdas en fila" + fila + "son" + recuento_columnas);// El bucle se ejecutará hasta la última celda de esa fila específica.para (int columna = 0; columna 

Explicación del código:

  • row_count da el número total de filas
  • para cada fila obtenemos el número total de columnas usando rows_table.get (row) .findElements (By.tagName ("td"));
  • Repetimos cada columna y cada fila y obtenemos valores.

Salida :

Resumen

  • By.xpath () se usa comúnmente para acceder a los elementos de la tabla.
  • Las tablas web estáticas en Selenium son de naturaleza consistente. es decir, tienen un número fijo de filas y datos de celda.
  • Las tablas web dinámicas son inconsistentes, es decir, no tienen un número fijo de datos de filas y celdas.
  • Usando el controlador web selenium, podemos manejar tablas web dinámicas fácilmente.
  • Selenium Webdriver nos permite acceder a tablas web dinámicas por su X-path

El artículo es una contribución de Kanchan Kulkarni.