Cum să gestionați tabelele web dinamice în Selenium

⚡ Rezumat inteligent

Gestionarea tabelelor web dinamice în Selenium WebDriver învață cum să itereze, să citească și să valideze tabele ale căror rânduri sau coloane se modifică în timpul execuției, acoperind identificarea, XPath, looping, și exemple.

  • 📋 Tabele dinamice: Tabele care încarcă numărul de rânduri și conținutul la momentul execuției.
  • 🧭 Strategia de localizare: Construiți XPath cu substituenți pentru rânduri și coloane.
  • 🔁 Iterare rânduri: Bucla findElements fără număr de rânduri codificat hard.
  • 📊 Citiți valorile: Folosește getText() pentru a exprimatract și afirmă datele celulei.
  • Așteptări inteligente: WebDriverWait se întrerupe până când rândurile se termină de randat.
  • 🤖 Asistență AI: Instrumentele de inteligență artificială detectează automat structurile și repară automat localizatoarele.

Cum să gestionați tabelele web dinamice în Selenium

Tabel Web în Selenium

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

  1. Tabele statice: Datele sunt statice, adică numărul de rânduri și coloane este fix.
  2. Tabelele dinamice: Datele sunt dinamice, adică numărul de rânduri și coloane NU este fix.

Cum să gestionați tabelul dinamic în Selenium

Mai jos este un exemplu de tabel web dinamic în Selenium pentru vanzari. Pe baza filtrelor de date introduse, numărul de rânduri va fi modificat. Deci, este de natură dinamică.

Manevrați tabelul dinamic în Selenium

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

Utilizarea X-Path pentru a localiza elementele tabelului web

Înainte de a găsi 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 radio dropdown, butoanele de trimitere etc. Aceste elemente HTML sunt scrise cu Începe etichetă și se termină cu un capăt etichetă.

De exemplu,

Primul meu document HTML.

Pași pentru obținerea căii X a elementului web pe care dorim să-l găsim.

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

Utilizarea X-Path pentru a localiza elementele tabelului web

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

Utilizarea X-Path pentru a localiza elementele tabelului web

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

Utilizarea X-Path pentru a localiza elementele tabelului web

Pas 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 tabelul web dinamic se manipulează Selenium, nu putem prezice numărul său de rânduri și coloane.

Utilizarea Selenium driver web, putem găsi

  • Numărul de rânduri și coloane ale tabelului web în Selenium
  • Datele rândului X sau ale coloanei Y.

Mai jos este programul pentru preluarea numărului total de rânduri și coloane pentru manipularea tabelului web Selenium:

Preluați numărul de rânduri și coloane

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= new ChromeDriver();
        wd.get("https://demo.guru99.com/test/web-table-">element.php");         
        //No.of Columns
        List <webelement> col = wd.findElements(By.xpath(".//*[@id=\"leftcontainer\"]/table/thead/tr/th"));
        System.out.println("No of cols are : " +col.size()); 
        //No.of rows 
        List <webelement> rows = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/tbody/tr/td[1]")); 
        System.out.println("No of rows are : " + rows.size());
        wd.close();
    }
}

Code Explicaţie:

  • Aici am declarat mai întâi obiectul Web Driver „wd” și l-am inițializat în driverul Chrome.
  • Folosim Listă la numărul total de coloane din „col”.
  • Comenzile findElements returnează o listă cu TOATE elementele care se potrivesc cu locatorul 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:

Preluați numărul de rânduri și coloane

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

Să presupunem că avem nevoie de 3rd rândul tabelului și datele celei de-a doua celule. Vezi tabelul de mai jos -

Preluați valoarea celulei pentru un anumit rând și coloană

În tabelul de mai sus, datele sunt actualizate în mod regulat după o anumită perioadă de timp. Datele pe care încercați să le preluaț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 3rd rând și 2nd datele coloanei.

Preluați valoarea celulei pentru un anumit rând și coloană

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= new ChromeDriver();
		 wd.get("https://demo.guru99.com/test/web-table-">element.php"); 
		 wd.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
		 WebElement baseTable = wd.findElement(By.tagName("table"));
		  
		 //To find third row of table
		 WebElement tableRow = baseTable.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]"));
         String rowtext = tableRow.getText();
		 System.out.println("Third row of table : "+rowtext);
		    
		    //to get 3rd row's 2nd column data
		    WebElement cellIneed = tableRow.findElement(By.xpath("//*[@id=\"leftcontainer\"]/table/tbody/tr[3]/td[2]"));
		    String valueIneed = cellIneed.getText();
		    System.out.println("Cell value is : " + valueIneed); 
		    wd.close();
    }
}

Code Explicaţie:

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

producție:

Preluați valoarea celulei pentru un anumit rând și coloană din tabelul dinamic

Exemplu: Obțineți maximul tuturor valorilor dintr-o coloană a tabelului dinamic

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

Consultați următorul tabel -

Obțineți maximul tuturor valorilor dintr-o coloană a tabelului dinamic

Iată codul

Obțineți maximul tuturor valorilor dintr-o coloană a tabelului dinamic

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= new ChromeDriver();
		 wd.get("https://demo.guru99.com/test/web-table-">element.php"); 
		 String max;
	     double m=0,r=0;
		 
	       //No. of Columns
	        List <webelement> col = wd.findElements(By.xpath(".//*[@id='leftcontainer']/table/thead/tr/th"));
	        System.out.println("Total No of columns are : " +col.size());
	        //No.of rows
	        List <webelement> rows = wd.findElements(By.xpath (".//*[@id='leftcontainer']/table/tbody/tr/td[1]"));
	        System.out.println("Total No of rows are : " + rows.size());
	        for (int i =1;i<rows.size();i++)
	        {    
	            max= wd.findElement(By.xpath("html/body/div[1]/div[5]/table/tbody/tr[" + (i+1)+ "]/td[4]")).getText();
	            NumberFormat f =NumberFormat.getNumberInstance(); 
	            Number num = f.parse(max);
	            max = num.toString();
	            m = Double.parseDouble(max);
	            if(m>r)
	             {    
	                r=m;
	             }
	        }
	        System.out.println("Maximum current price is : "+ r);
    }
}

</webelement></webelement>

Code Explicaţie:

  • Folosind driverul Chrome, găsim tabelul web și obținem numărul total de rând folosind XPath „.//*[@id='leftcontainer']/table/tbody/tr/td[1]”
  • Folosind bucla for, repetăm ​​numărul total de rânduri și obținem valori unul câte unul. Pentru a obține următorul rând, folosim (i+1) în XPath
  • Comparăm valoarea veche cu valoarea nouă, iar valoarea maximă este tipărită la sfârșitul buclei for

Ieșire

Obțineți maximul tuturor valorilor dintr-o coloană a tabelului dinamic

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

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

Obțineți toate valorile unui tabel dinamic

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

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

Trebuie să obținem valorile tuturor celulelor

Iată codul:

Obțineți toate valorile unui tabel dinamic

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 = new ChromeDriver();
    	wd.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    	wd.get("https://demo.guru99.com/test/table.html");
    	//To locate table.
    	WebElement mytable = wd.findElement(By.xpath("/html/body/table/tbody"));
    	//To locate rows of table. 
    	List < WebElement > rows_table = mytable.findElements(By.tagName("tr"));
    	//To calculate no of rows In table.
    	int rows_count = rows_table.size();
    	//Loop will execute till the last row of table.
    	for (int row = 0; row < rows_count; row++) {
    	    //To locate columns(cells) of that specific row.
    	    List < WebElement > Columns_row = rows_table.get(row).findElements(By.tagName("td"));
    	    //To calculate no of columns (cells). In that specific row.
    	    int columns_count = Columns_row.size();
    	    System.out.println("Number of cells In Row " + row + " are " + columns_count);
    	    //Loop will execute till the last cell of that specific row.
    	    for (int column = 0; column < columns_count; column++) {
    	        // To retrieve text from that specific cell.
    	        String celtext = Columns_row.get(column).getText();
    	        System.out.println("Cell Value of row number " + row + " and column number " + column + " Is " + celtext);
    	    }
    	    System.out.println("-------------------------------------------------- ");
    	}
   	}
}

Code Explicaţie:

  • rows_count oferă numărul total de rânduri
  • pentru fiecare rând obținem numărul total de coloane folosind rows_table.get(row).findElements(By.tagName("td"));
  • Repetăm ​​fiecare coloană și fiecare rând și obținem valori.

producție:

Obțineți toate valorile unui tabel dinamic

Întrebări frecvente

Un tabel cu rânduri sau coloane care se modifică în timpul execuției prin AJAX sau filtre.

AI detectează automat structura, generează XPath și corectează automat selectorii atunci când coloanele se schimbă.

Da. Copilot generează XPath-uri de tip buclă de rânduri, getText extracțiune și afirmații.

//table[@id]//tr[ROW]/td[COL] cu substituenți înlocuiți în interiorul buclelor.

Folosește WebDriverWait cu visibilityOfElementLocated în tabel.

Bucla fiecărei celule din coloană, analiza textul, track cea mai mare valoare.

Tabelul a fost redat din nou. Relocați elementele în interiorul buclei.

Folosește driver.findElements(By.xpath("//table//tr")).size().

Rezumați această postare cu: