Hvordan håndtere dynamiske netttabeller i Selenium

⚡ Smart oppsummering

Håndter dynamiske webtabeller i Selenium WebDriver lærer hvordan man iterererer, leser og validerer tabeller der rader eller kolonner endres under kjøretid, og dekker identifikasjon, XPath, looping, og eksempler.

  • ???? Dynamiske tabeller: Tabeller som laster inn radantall og innhold under kjøretid.
  • 🧭 Lokaliseringsstrategi: Bygg XPath med plassholdere for rader og kolonner.
  • 🔁 Iterer rader: Løkke findElements uten hardkodede radtall.
  • 📊 Les verdier: Bruk getText() til å f.eks.tract og hevde celledata.
  • Smarte ventetider: WebDriverWait pauser til radene er ferdige med å gjengis.
  • 🤖 AI-hjelp: AI-verktøy automatisk oppdager strukturer og selvreparerende lokaliseringsverktøy.

Hvordan håndtere dynamiske netttabeller i Selenium

Webtabell i Selenium

Det er to typer HTML-tabeller publisert på nettet-

  1. Statiske tabeller: Data er statisk dvs. Antall rader og kolonner er faste.
  2. Dynamiske tabeller: Data er dynamisk dvs. Antall rader og kolonner er IKKE faste.

Hvordan håndtere dynamisk tabell i Selenium

Nedenfor er et eksempel på en dynamisk netttabell i Selenium for salg. Basert på inndatafiltre vil antall rader bli endret. Så det er dynamisk i naturen.

Håndter dynamisk bord inn Selenium

Det er enkelt å håndtere statiske tabeller, men å håndtere dynamiske tabeller i Selenium er litt vanskelig da rader og kolonner ikke er konstante.

Bruke X-Path for å finne webtabellelementer

Før vi finner webelement, la oss først forstå-

Hva er et webelement?

Nettelementer er ikke annet enn HTML-elementer som tekstboks, alternativknapper for rullegardinmenyene, send inn-knapper osv. Disse HTML-elementene er skrevet med Begynn tag og slutter med en slutt tag.

For eksempel,

Mitt første HTML-dokument.

Trinn for å få X-banen til webelementet som vi ønsker å finne.

Trinn 1) Gå til i Chrome https://demo.guru99.com/test/web-table-element.php

Bruke X-Path for å finne webtabellelementer

Trinn 2) Høyreklikk på webelementet hvis x-bane skal hentes. I vårt tilfelle, høyreklikk på "Selskap" Velg alternativet Inspiser. Følgende skjerm vil vises -

Bruke X-Path for å finne webtabellelementer

Trinn 3) Høyreklikk på uthevet webelement > Velg Kopier -> Kopier x-banealternativ.

Bruke X-Path for å finne webtabellelementer

Trinn 4) Bruk den kopierte X-banen "//*[@id="leftcontainer"]/table/thead/tr/th [1]" i Selenium WebDriver for å finne elementet.

Eksempel: Hent antall rader og kolonner fra Dynamic WebTable

Mens dynamisk netttabellhåndtering i Selenium, kan vi ikke forutsi antall rader og kolonner.

Ved hjelp av Selenium nettdriver, kan vi finne

  • Antall rader og kolonner i netttabellen Selenium
  • X rad eller Y kolonnes data.

Nedenfor er program for å hente totalt antall rader og kolonner for håndtering av webtabell i Selenium:

Hent antall rader og kolonner

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 Forklaring:

  • Her har vi først erklært Web Driver-objektet "wd" og initialisert det til chrome-driver.
  • Vi bruker List til totalt antall kolonner i "col".
  • findElements-kommandoer returnerer en liste over ALLE elementene som samsvarer med den spesifiserte lokatoren
  • ved å bruke findElements og X-path //*[@id=\”leftcontainer\”]/table/thead/tr/th får vi alle kolonnene
  • På samme måte gjentar vi prosessen for rader.

Utgang:

Hent antall rader og kolonner

Eksempel: Hent celleverdi for en bestemt rad og kolonne i den dynamiske tabellen

La oss anta at vi trenger 3rd rad i tabellen og dens andre celles data. Se tabellen nedenfor-

Hent celleverdi for en bestemt rad og kolonne

I tabellen ovenfor oppdateres data regelmessig etter en viss tid. Dataene du prøver å hente vil være forskjellig fra skjermbildet ovenfor. Imidlertid forblir koden den samme. Her er eksempelprogram for å få 3rd rad og 2nd kolonnens data.

Hent celleverdi for en bestemt rad og kolonne

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 Forklaring:

  • Tabellen er lokalisert ved å bruke locator-egenskapen "tagname".
  • Ved hjelp av XPath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]” finn 3rd rad og henter teksten ved hjelp av getText ()-funksjonen
  • Bruk Xpath “//*[@id=\”leftcontainer\”]/table/tbody/tr[3]/td[2]” finn den andre cellen i 2rd rad og henter teksten ved hjelp av getText ()-funksjonen

Produksjon:

Hent celleverdi av en bestemt rad og kolonne i den dynamiske tabellen

Eksempel: Få maksimalt av alle verdiene i en kolonne med dynamisk tabell

I dette eksemplet vil vi få maksimum av alle verdier i en bestemt kolonne.

Se følgende tabell –

Få maksimalt av alle verdiene i en kolonne med dynamisk tabell

Her er koden

Få maksimalt av alle verdiene i en kolonne med dynamisk tabell

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 Forklaring:

  • Ved å bruke Chrome-driveren finner vi netttabellen og får totalt antall rader ved å bruke XPath “.//*[@id='leftcontainer']/table/tbody/tr/td[1]”
  • Ved å bruke for loop, itererer vi gjennom totalt antall rader og henter verdier én etter én. For å få neste rad bruker vi (i+1) i XPath
  • Vi sammenligner gammel verdi med ny verdi og maksimal verdi skrives ut på slutten av for loop

Produksjon

Få maksimalt av alle verdiene i en kolonne med dynamisk tabell

Eksempel: Få alle verdiene til en dynamisk tabell

Tenk på følgende tabell: https://demo.guru99.com/test/table.html

Få alle verdiene til en dynamisk tabell

Antall kolonner for hver rad er forskjellig.

Her har rad nummer 1, 2 og 4 3 celler, og rad nummer 3 har 2 celler, og rad nummer 5 har 1 celle.

Vi må få verdier av alle cellene

Her er koden:

Få alle verdiene til en dynamisk tabell

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 Forklaring:

  • rows_count gir det totale antallet rader
  • for hver rad får vi totalt antall kolonner ved hjelp av rows_table.get(row).findElements(By.tagName("td"));
  • Vi itererer gjennom hver kolonne og av hver rad og henter verdier.

Produksjon:

Få alle verdiene til en dynamisk tabell

Spørsmål og svar

En tabell med rader eller kolonner som endres under kjøring via AJAX eller filtre.

AI oppdager struktur automatisk, genererer XPath og reparerer selvselektorer når kolonner forskyves.

Ja. Copilot genererer radløkke-XPath, getText f.eks.tracsjon og påstander.

//tabell[@id]//tr[ROW]/td[COL] med plassholdere erstattet inni løkker.

Bruk WebDriverWait med visibilityOfElement som ligger på tabellen.

Løkke hver celle i kolonnen, analyser tekst, track den høyeste verdien.

Tabellen ble gjengitt på nytt. Flytt plasseringen av elementene inne i løkken.

Bruk driver.findElements(By.xpath(“//table//tr”)).size().

Oppsummer dette innlegget med: