Există două tipuri de tabele HTML publicate pe web-
- Tabelele statice : datele sunt statice, adică numărul de rânduri și coloane este fixat.
- 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.