Hur man hanterar dynamiska webbtabeller i Selenium

โšก Smart sammanfattning

Hantera dynamiska webbtabeller i Selenium WebDriver lรคr ut hur man itererar, lรคser och validerar tabeller vars rader eller kolumner รคndras vid kรถrning, vilket tรคcker identifiering, XPath, looping, och exempel.

  • ๐Ÿ“‹ Dynamiska tabeller: Tabeller som laddar radantal och innehรฅll vid kรถrning.
  • ๐Ÿงญ Lokaliseringsstrategi: Bygg XPath med platshรฅllare fรถr rader och kolumner.
  • ๐Ÿ” Iterera rader: Loopa findElements utan hรฅrdkodade radantal.
  • ๐Ÿ“Š Lรคs vรคrden: Anvรคnd getText() fรถr att t.ex.tract och hรคvda celldata.
  • โณ Smarta vรคntan: WebDriverWait pausar tills raderna har renderats.
  • ๐Ÿค– AI-hjรคlp: AI-verktyg detekterar strukturer automatiskt och sjรคlvlรคkar lokaliseringsverktyg.

Hur man hanterar dynamiska webbtabeller i Selenium

Webbtabell in Selenium

Det finns tvรฅ typer av HTML-tabeller publicerade pรฅ webben-

  1. Statiska tabeller: Data รคr statisk dvs antalet rader och kolumner รคr fasta.
  2. Dynamiska tabeller: Data รคr dynamisk, dvs. Antal rader och kolumner รคr INTE fasta.

Hur man hanterar dynamisk tabell i Selenium

Nedan รคr ett exempel pรฅ en dynamisk webbtabell i Selenium till salu. Baserat pรฅ inmatade datumfilter kommer antalet rader att รคndras. Sรฅ det รคr dynamiskt till sin natur.

Hantera Dynamic Table in Selenium

Att hantera statiska tabeller รคr enkelt, men att hantera dynamiska tabeller i Selenium รคr lite svรฅrt eftersom rader och kolumner inte รคr konstanta.

Anvรคnda X-Path fรถr att hitta webbtabellelement

Innan vi hittar webbelement, lรฅt oss fรถrst fรถrstรฅ-

Vad รคr ett webbelement?

Webbelement รคr inget annat รคn HTML-element som textruta, alternativknappar fรถr rullgardinsmenyn, skicka knappar, etc. Dessa HTML-element รคr skrivna med starta tagg och slutar med en รคnden mรคrka.

Till exempel,

Mitt fรถrsta HTML-dokument.

Steg fรถr att fรฅ X-vรคg fรถr webbelement som vi vill hitta.

Steg 1) Gรฅ till i Chrome https://demo.guru99.com/test/web-table-element.php

Anvรคnda X-Path fรถr att hitta webbtabellelement

Steg 2) Hรถgerklicka pรฅ webbelement vars x-sรถkvรคg ska hรคmtas. I vรฅrt fall, hรถgerklicka pรฅ "Fรถretag" Vรคlj alternativet Inspektera. Fรถljande skรคrm kommer att visas -

Anvรคnda X-Path fรถr att hitta webbtabellelement

Steg 3) Hรถgerklicka pรฅ det markerade webbelementet > Vรคlj Kopiera -> Kopiera x-sรถkvรคg.

Anvรคnda X-Path fรถr att hitta webbtabellelement

Steg 4) Anvรคnd den kopierade X-sรถkvรคgen โ€œ//*[@id=โ€leftcontainerโ€]/table/thead/tr/th [1]โ€ i Selenium WebDriver fรถr att hitta elementet.

Exempel: Hรคmta antal rader och kolumner frรฅn Dynamic WebTable

Medan dynamisk webbtabellshantering in Selenium, kan vi inte fรถrutsรคga antalet rader och kolumner.

Anvรคnda Selenium webbdrivrutin kan vi hitta

  • Antal rader och kolumner i webbtabellen Selenium
  • X rad eller Y kolumns data.

Nedan finns ett program fรถr att hรคmta totalt antal rader och kolumner fรถr att hantera webbtabeller i Selenium:

Hรคmta antal rader och kolumner

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 Fรถrklaring:

  • Hรคr har vi fรถrst deklarerat Web Driver-objektet "wd" & initierat det till chrome-drivrutinen.
  • Vi anvรคnder List till totalt antal kolumner i "kol".
  • findElements-kommandon returnerar en lista รถver ALLA element som matchar den angivna lokaliseringen
  • med findElements och X-path //*[@id=\โ€leftcontainer\โ€]/table/thead/tr/th fรฅr vi alla kolumner
  • Pรฅ samma sรคtt upprepar vi processen fรถr rader.

Produktion:

Hรคmta antal rader och kolumner

Exempel: Hรคmta cellvรคrde fรถr en viss rad och kolumn i den dynamiska tabellen

Lรฅt oss anta att vi behรถver 3rd rad i tabellen och dess andra cells data. Se tabellen nedan-

Hรคmta cellvรคrde fรถr en viss rad och kolumn

I ovanstรฅende tabell uppdateras data regelbundet efter en viss tid. Datan du fรถrsรถker hรคmta kommer att skilja sig frรฅn skรคrmdumpen ovan. Koden fรถrblir dock densamma. Hรคr รคr exempel pรฅ program fรถr att fรฅ 3rd rad och 2nd kolumns data.

Hรคmta cellvรคrde fรถr en viss rad och kolumn

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 Fรถrklaring:

  • Tabellen รคr lokaliserad med hjรคlp av lokaliseringsegenskapen "tagnamn".
  • Anvรคnda XPath โ€œ//*[@id=\โ€leftcontainer\โ€]/table/tbody/tr[3]โ€ hitta 3:anrd rad och hรคmtar sin text med funktionen getText ().
  • Anvรคnd Xpath โ€œ//*[@id=\โ€leftcontainer\โ€]/table/tbody/tr[3]/td[2]โ€ hitta den andra cellen i 2rd rad och hรคmtar sin text med funktionen getText ().

Produktion:

Hรคmta cellvรคrde fรถr en viss rad och kolumn i den dynamiska tabellen

Exempel: Fรฅ maximalt av alla vรคrden i en kolumn med dynamisk tabell

I det hรคr exemplet kommer vi att fรฅ maximalt av alla vรคrden i en viss kolumn.

Se fรถljande tabell โ€“

Fรฅ maximalt av alla vรคrden i en kolumn med dynamisk tabell

Hรคr รคr koden

Fรฅ maximalt av alla vรคrden i en kolumn 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 Fรถrklaring:

  • Med hjรคlp av chrome-drivrutinen hittar vi webbtabellen och fรฅr det totala antalet rader med XPath ".//*[@id='leftcontainer']/table/tbody/tr/td[1]"
  • Med hjรคlp av for loop, itererar vi genom totalt antal rader och hรคmtar vรคrden en efter en. Fรถr att fรฅ nรคsta rad anvรคnder vi (i+1) i XPath
  • Vi jรคmfรถr gammalt vรคrde med nytt vรคrde och maximalt vรคrde skrivs ut i slutet av for loop

Produktion

Fรฅ maximalt av alla vรคrden i en kolumn med dynamisk tabell

Exempel: Hรคmta alla vรคrden fรถr en dynamisk tabell

Tรคnk pรฅ fรถljande tabell: https://demo.guru99.com/test/table.html

Fรฅ alla vรคrden fรถr en dynamisk tabell

Antalet kolumner fรถr varje rad รคr olika.

Hรคr har rad nummer 1, 2 och 4 3 celler, och rad nummer 3 har 2 celler och rad nummer 5 har 1 cell.

Vi mรฅste fรฅ vรคrden pรฅ alla celler

Hรคr รคr koden:

Fรฅ alla vรคrden fรถr 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 Fรถrklaring:

  • rows_count ger det totala antalet rader
  • fรถr varje rad fรฅr vi det totala antalet kolumner som anvรคnder rows_table.get(row).findElements(By.tagName("td"));
  • Vi itererar genom varje kolumn och av varje rad och hรคmtar vรคrden.

Produktion:

Fรฅ alla vรคrden fรถr en dynamisk tabell

Vanliga frรฅgor

En tabell med rader eller kolumner som รคndras vid kรถrning via AJAX eller filter.

AI upptรคcker automatiskt struktur, genererar XPath och reparerar sjรคlvselektorer nรคr kolumner fรถrskjuts.

Ja. Copilot genererar rad-loop XPath, getText extraction och pรฅstรฅenden.

//tabell[@id]//tr[ROW]/td[COL] med platshรฅllare ersatta inuti loopar.

Anvรคnd WebDriverWait med visibilityOfElement som finns i tabellen.

Loopa varje cell i kolumnen, tolka text, track det hรถgsta vรคrdet.

Tabellen renderades om. Flytta elementen inuti loopen.

Anvรคnd driver.findElements(By.xpath("//table//tr")).size().

Sammanfatta detta inlรคgg med: