Manipulando tabelas dinâmicas da Web usando Selenium WebDriver

Índice:

Anonim

Existem dois tipos de tabelas HTML publicadas na web-

  1. Tabelas estáticas : os dados são estáticos, ou seja, o número de linhas e colunas é fixo.
  2. Tabelas dinâmicas : os dados são dinâmicos, ou seja, o número de linhas e colunas NÃO é fixo.

Agora, aprenderemos como lidar com tabelas dinâmicas no Selenium:

Abaixo está um exemplo de uma tabela web dinâmica no Selenium for Sales. Com base nos filtros de data de entrada, o número de linhas será alterado. Portanto, é de natureza dinâmica.

O manuseio de tabelas estáticas é fácil, mas o manuseio de tabelas dinâmicas no Selenium é um pouco difícil, pois as linhas e colunas não são constantes.

Neste tutorial, você aprenderá-

  • Usando o X-Path para localizar elementos da tabela da web
  • Exemplo: buscar o número de linhas e colunas da Dynamic WebTable
  • Exemplo: busque o valor da célula de uma determinada linha e coluna da Tabela Dinâmica
  • Exemplo: Obtenha o máximo de todos os valores em uma coluna de uma tabela dinâmica
  • Exemplo: obtenha todos os valores de uma tabela dinâmica

Usando o X-Path para localizar elementos da tabela da web

Antes de localizar o elemento da web, primeiro vamos entender-

O que é um elemento da web?

Os elementos da Web nada mais são do que elementos HTML como caixa de texto, botões de opção suspensos, botões de envio, etc. Esses elementos HTML são escritos com a marca de início e terminam com uma marca de fim .

Por exemplo,

Meu primeiro documento HTML

.

Etapas para obter o caminho X do elemento da web que desejamos localizar.

Etapa 1) No Chrome, vá para http://demo.guru99.com/test/web-table-element.php

Etapa 2) Clique com o botão direito no elemento da web cujo caminho x deve ser obtido. No nosso caso, clique com o botão direito em "Empresa" Selecione a opção Inspecionar. A seguinte tela será mostrada -

Etapa 3) Clique com o botão direito no elemento da web realçado> Selecione Copiar -> opção Copiar x-path.

Etapa 4) Use o X-path copiado "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" no Selenium WebDriver para localizar o elemento.

Exemplo: buscar o número de linhas e colunas da Dynamic WebTable

Embora o manuseio dinâmico de tabelas da web no Selenium, não podemos prever seu número de linhas e colunas.

Usando o driver da web Selenium, podemos encontrar

  • Número de linhas e colunas da tabela da web no Selenium
  • Dados da linha X ou da coluna Y.

Abaixo está o programa para buscar o número total de linhas e colunas para lidar com a tabela da web no Selenium:

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;public class Noofrowsandcols {public static void main (String [] args) throws ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = novo ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");// Sem ColunasLista  col = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("No de cols são: + col.size ());// Sem linhasLista  rows = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("O número de linhas é: + rows.size ()); wd.close (); }}  

Explicação do código:

  • Aqui, primeiro declaramos o objeto Web Driver "wd" e o inicializamos no driver Chrome.
  • Usamos List para o número total de colunas em "col".
  • Os comandos findElements retornam uma lista de TODOS os elementos que correspondem ao localizador especificado
  • usando findElements e X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th obtemos todas as colunas
  • Da mesma forma, repetimos o processo para as linhas.

Resultado:

Exemplo: busque o valor da célula de uma determinada linha e coluna da Tabela Dinâmica

Vamos supor que precisamos da linha da tabela e dos dados de sua segunda célula. Veja a tabela abaixo

Na tabela acima, os dados são atualizados regularmente após algum tempo. Os dados que você tenta recuperar serão diferentes da captura de tela acima. No entanto, o código permanece o mesmo. Aqui está um programa de amostra para obter os dados da linha e da coluna.

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import java.util.concurrent.TimeUnit;public class RowandCell {public static void main (String [] args) throws ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = novo 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 ("tabela"));// Para encontrar a terceira linha da tabelaWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));String rowtext = tableRow.getText ();System.out.println ("Terceira linha da tabela: + texto da linha);// para obter os dados da segunda coluna da 3ª linhaWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));String valueIneed = cellIneed.getText ();System.out.println ("O valor da célula é: + valueIneed);wd.close ();}}

Explicação do código:

  • A tabela está localizada usando a propriedade do localizador "tagname".
  • Usando XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]" encontre a linha e obtenha seu texto usando a função getText ()
  • Usando Xpath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]" encontre a 2ª célula na linha e obtenha seu texto usando a função getText ()

Produto :

Exemplo: Obtenha o máximo de todos os valores em uma coluna de uma tabela dinâmica

Neste exemplo, obteremos o máximo de todos os valores em uma coluna particular.

Consulte a seguinte tabela -

Aqui está o código

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import java.text.NumberFormat;public class MaxFromTable {public static void main (String [] args) throws ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = novo ChromeDriver ();wd.get ("http://demo.guru99.com/test/web-table-element.php");String max;duplo m = 0, r = 0;//Não. de colunasLista  col = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Número total de colunas: + col.size ());// Sem linhasLista  rows = wd.findElements (By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println ("Número total de linhas: + rows.size ()); for (int i = 1; i  r) {r = m; }} System.out.println ("O preço máximo atual é: + r); }}  

Explicação do código:

  • Usando o driver do Chrome, localizamos a tabela da web e obtemos o número total de linhas usando XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
  • Usando o loop for, iteramos através do número total de linhas e buscamos valores um por um. Para obter a próxima linha, usamos (i + 1) em XPath
  • Comparamos o valor antigo com o novo valor e o valor máximo é impresso no final do loop for

Resultado

Exemplo: obtenha todos os valores de uma tabela dinâmica

Considere a seguinte tabela http://demo.guru99.com/test/table.html

O número de colunas para cada linha é diferente.

Aqui, as linhas 1, 2 e 4 têm 3 células, e a linha 3 tem 2 células e a linha 5 tem 1 célula.

Precisamos obter valores de todas as células

Aqui está o código:

import java.text.ParseException;import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import java.util.concurrent.TimeUnit;import org.openqa.selenium.chrome.ChromeDriver;public class NofRowsColmns {public static void main (String [] args) throws ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = novo ChromeDriver ();wd.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);wd.get ("http://demo.guru99.com/test/table.html");// Para localizar a mesa.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Para localizar linhas da tabela.List  rows_table = mytable.findElements (By.tagName ("tr"));// Para calcular o número de linhas na tabela.int row_count = rows_table.size ();// O loop será executado até a última linha da tabela.para (linha interna = 0; linha  Columns_row = rows_table.get (row) .findElements (By.tagName ("td"));// Para calcular o número de colunas (células). Nessa linha específica.int column_count = Columns_row.size ();System.out.println ("Número de células na linha" + linha + "são" + coluna_contagem);// O loop será executado até a última célula dessa linha específica.para (coluna interna = 0; coluna 

Explicação do código:

  • row_count dá o número total de linhas
  • para cada linha, obtemos o número total de colunas usando rows_table.get (row) .findElements (By.tagName ("td"));
  • Nós iteramos por meio de cada coluna e de cada linha e buscamos valores.

Produto :

Resumo

  • By.xpath () é comumente usado para acessar os elementos da tabela.
  • As tabelas estáticas da web no Selenium são de natureza consistente. ou seja, eles têm um número fixo de linhas, bem como dados de células.
  • As tabelas dinâmicas da web são inconsistentes, ou seja, não possuem um número fixo de linhas e dados de células.
  • Usando o driver da web selenium, podemos lidar facilmente com tabelas dinâmicas da web.
  • Selenium Webdriver nos permite acessar tabelas dinâmicas da web por seu X-path

O artigo foi contribuído por Kanchan Kulkarni.