Gestionarea meselor web dinamice utilizând Selenium WebDriver

Cuprins:

Anonim

Există două tipuri de tabele HTML publicate pe web-

  1. Tabelele statice : datele sunt statice, adică numărul de rânduri și coloane este fixat.
  2. Tabelele dinamice : datele sunt dinamice, adică numărul de rânduri și coloane NU sunt fixate.

Acum, vom învăța cum să gestionăm tabelul dinamic în Selenium:

Mai jos este un exemplu de tabel web dinamic în Selenium for Sales. Pe baza filtrelor de date de intrare, numărul de rânduri va fi modificat. Deci, are o natură dinamică.

Manevrarea tabelelor statice este ușoară, dar manipularea tabelelor dinamice în Selenium este puțin dificilă, deoarece rândurile și coloanele nu sunt constante.

În acest tutorial, veți învăța-

  • Utilizarea X-Path pentru localizarea elementelor tabelului web
  • Exemplu: preluați numărul de rânduri și coloane din Dynamic WebTable
  • Exemplu: Preluați valoarea celulei unui anumit rând și coloană din tabelul dinamic
  • Exemplu: Obțineți maximul tuturor valorilor dintr-o coloană din tabelul dinamic
  • Exemplu: obțineți toate valorile unui tabel dinamic

Utilizarea X-Path pentru localizarea elementelor tabelului web

Înainte de a localiza elementul web, mai întâi să înțelegem-

Ce este un element web?

Elementele web nu sunt altceva decât elemente HTML, cum ar fi caseta de text, butoanele de tip drop-down, butoanele de trimitere etc. Aceste elemente HTML sunt scrise cu eticheta de început și se termină cu o etichetă de final .

De exemplu,

Primul meu document HTML

.

Pași pentru obținerea căii X a elementului web pe care dorim să îl localizăm.

Pasul 1) În Chrome, accesați http://demo.guru99.com/test/web-table-element.php

Pasul 2) Faceți clic dreapta pe elementul web a cărui cale X trebuie preluată. În cazul nostru, faceți clic dreapta pe opțiunea „Companie” Selectați Inspectare. Va fi afișat următorul ecran -

Pasul 3) Faceți clic dreapta pe elementul web evidențiat> Selectați Copiere -> Copiați opțiunea x-path.

Pasul 4) Utilizați calea X ​​copiată "// * [@ id =" leftcontainer "] / table / thead / tr / th [1]" în Selenium WebDriver pentru a localiza elementul.

Exemplu: preluați numărul de rânduri și coloane din Dynamic WebTable

În timp ce gestionarea dinamică a tabelelor web în Selenium, nu putem prezice numărul său de rânduri și coloane.

Folosind driverul web Selenium, putem găsi

  • Numărul de rânduri și coloane ale tabelului web în seleniu
  • Rândul X sau datele coloanei Y.

Mai jos este programul pentru preluarea numărului total de rânduri și coloane pentru tratarea tabelului web în 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;clasă publică Noofrowsandcols {public static main principal (String [] args) aruncă ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nou ChromeDriver ();wd.get („http://demo.guru99.com/test/web-table-element.php”);// Nr.de coloaneListă  col = wd.findElements (By.xpath (".//*[@ id = \" leftcontainer \ "] / table / thead / tr / th"));System.out.println ("Numărul de coluri sunt: + col.size ());//Nr.de rânduriListă  rânduri = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / tbody / tr / td [1]")); System.out.println ("Numărul de rânduri sunt: + rows.size ()); wd.close (); }}  

Explicatie cod:

  • Aici am declarat mai întâi obiectul Web Driver „wd” și l-am inițializat la driverul crom.
  • Folosim List la numărul total de coloane din „col”.
  • comenzile findElements returnează o listă cu TOATE elementele care se potrivesc cu localizatorul specificat
  • folosind findElements și X-path // * [@ id = \ "leftcontainer \"] / table / thead / tr / th obținem toate coloanele
  • În mod similar, repetăm ​​procesul pentru rânduri.

Ieșire:

Exemplu: Preluați valoarea celulei unui anumit rând și coloană din tabelul dinamic

Să presupunem că avem nevoie de al treilea rând al tabelului și de datele celei de-a doua celule a acestuia. Vezi tabelul de mai jos-

În tabelul de mai sus, datele sunt actualizate în mod regulat după o perioadă de timp. Datele pe care încercați să le extrageți vor fi diferite de captura de ecran de mai sus. Cu toate acestea, codul rămâne același. Iată un exemplu de program pentru a obține al treilea rând și a doua coloană de date.

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 main principal (String [] args) aruncă ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nou ChromeDriver ();wd.get („http://demo.guru99.com/test/web-table-element.php”);wd.manage (). timeouts (). implicit Așteptați (20, TimeUnit.SECONDS);WebElement baseTable = wd.findElement (By.tagName ("tabel"));// Pentru a găsi al treilea rând de tabelWebElement tableRow = baseTable.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]"));String rând text = tableRow.getText ();System.out.println ("Al treilea rând al tabelului: + text de rând);// pentru a obține datele din coloana a 2-a a rânduluiWebElement cellIneed = tableRow.findElement (By.xpath ("// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]"));String valueIneed = cellIneed.getText ();System.out.println ("Valoarea celulei este: + valueIneed);wd.close ();}}

Explicatie cod:

  • Tabelul este localizat utilizând proprietatea de localizare „tagname”.
  • Folosind XPath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3]" găsiți al treilea rând și obțineți textul folosind funcția getText ()
  • Folosind Xpath "// * [@ id = \" leftcontainer \ "] / table / tbody / tr [3] / td [2]" găsiți a doua celulă în al treilea rând și obțineți textul utilizând funcția getText ()

Ieșire :

Exemplu: Obțineți maximul tuturor valorilor dintr-o coloană din tabelul dinamic

În acest exemplu, vom obține maximul tuturor valorilor dintr-o anumită coloană.

Consultați următorul tabel -

Iată codul

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 main principal (String [] args) aruncă ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nou ChromeDriver ();wd.get („http://demo.guru99.com/test/web-table-element.php”);Șir maxim;dublu m = 0, r = 0;//Nu. de ColoaneListă  col = wd.findElements (By.xpath (".//*[@ id = 'leftcontainer'] / table / thead / tr / th"));System.out.println ("Numărul total de coloane sunt: + col.size ());//Nr.de rânduriListă  rânduri = wd.findElements (By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); System.out.println ("Numărul total de rânduri sunt: + rows.size ()); for (int i = 1; i  r) {r = m; }} System.out.println ("Prețul curent maxim este: + r); }}  

Explicatie cod:

  • Folosind driverul Chrome, localizăm tabelul web și obținem numărul total de rânduri folosind XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
  • Folosind bucla pentru, parcurgem numărul total de rânduri și preluăm valorile unul câte unul. Pentru a obține rândul următor, folosim (i + 1) în XPath
  • Comparăm valoarea veche cu cea nouă, iar valoarea maximă este tipărită la sfârșitul buclei

OutPut

Exemplu: obțineți toate valorile unui tabel dinamic

Luați în considerare următorul tabel http://demo.guru99.com/test/table.html

Numărul de coloane pentru fiecare rând este diferit.

Aici rândul 1, 2 și 4 are 3 celule, iar rândul 3 are 2 celule, iar numărul 5 are 1 celulă.

Trebuie să obținem valori ale tuturor celulelor

Iată codul:

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;clasa publica NofRowsColmns {public static main principal (String [] args) aruncă ParseException {WebDriver wd;System.setProperty ("webdriver.chrome.driver", "G: //chromedriver.exe");wd = nou ChromeDriver ();wd.manage (). timeouts (). implicit Așteptați (5, TimeUnit.SECONDS);wd.get („http://demo.guru99.com/test/table.html”);// Pentru a localiza tabelul.WebElement mytable = wd.findElement (By.xpath ("/ html / body / table / tbody"));// Pentru a localiza rânduri de tabel.Listă  tables_table = mytable.findElements (By.tagName ("tr"));// Pentru a calcula nr de rânduri În tabel.int rows_count = rows_table.size ();// Bucla se va executa până la ultimul rând al tabelului.pentru (int rând = 0; rând  Columns_row = rows_table.get (rând) .findElements (By.tagName ("td"));// Pentru a calcula numărul de coloane (celule). În acel rând specific.int columns_count = Columns_row.size ();System.out.println ("Numărul de celule din rând" + rând + "sunt" + număr_coloane);// Bucla se va executa până la ultima celulă a acelui rând specific.for (int coloană = 0; coloană 

Explicatie cod:

  • row_count indică numărul total de rânduri
  • pentru fiecare rând obținem numărul total de coloane folosind lines_table.get (rând) .findElements (By.tagName ("td"));
  • Repetăm ​​fiecare coloană și fiecare rând și preluăm valorile.

Ieșire :

rezumat

  • By.xpath () este utilizat în mod obișnuit pentru a accesa elementele tabelului.
  • Tabelele web statice în seleniu sunt consistente în natură. adică au un număr fix de rânduri, precum și date celulare.
  • Tabelele web dinamice sunt inconsistente, adică nu au un număr fix de rânduri și date de celule.
  • Folosind driverul web seleniu, putem gestiona cu ușurință mesele web dinamice.
  • Selenium Webdriver ne permite să accesăm tabele web dinamice prin calea lor X.

Articolul este contribuit de Kanchan Kulkarni.