Umgang mit dynamischen Webtabellen in Selenium

โšก Intelligente Zusammenfassung

Dynamische Webtabellen verwalten in Selenium WebDriver lehrt, wie man Tabellen durchlรคuft, liest und validiert, deren Zeilen oder Spalten sich zur Laufzeit รคndern, und behandelt dabei Identifizierung, XPath und die Suche nach Tabellen.ping, und Beispiele.

  • ๐Ÿ“‹ Dynamische Tabellen: Tabellen, die Zeilenanzahl und Inhalt zur Laufzeit laden.
  • ๐Ÿงญ Standortstrategie: XPath mit Zeilen- und Spaltenplatzhaltern erstellen.
  • ๐Ÿ” Zeilen durchlaufen: Schleife findElements ohne fest codierte Zeilenanzahl.
  • ๐Ÿ“Š Werte lesen: Verwenden Sie getText(), um zu extract und Zelldaten bestรคtigen.
  • โณ Intelligente Wartezeiten: WebDriverWait pausiert, bis die Zeilen vollstรคndig gerendert sind.
  • ๐Ÿค– KI-Unterstรผtzung: KI-Tools erkennen automatisch Strukturen und verfรผgen รผber selbstheilende Lokalisierungssysteme.

Umgang mit dynamischen Webtabellen in Selenium

Web-Tabelle in Selenium

Es gibt zwei Arten von HTML-Tabellen, die im Internet verรถffentlicht werden:

  1. Statische Tabellen: Die Daten sind statisch, dh die Anzahl der Zeilen und Spalten ist festgelegt.
  2. Dynamische Tabellen: Die Daten sind dynamisch, dh die Anzahl der Zeilen und Spalten ist NICHT festgelegt.

Umgang mit dynamischen Tabellen in Selenium

Unten finden Sie ein Beispiel fรผr eine dynamische Webtabelle in Selenium zu verkaufen. Basierend auf Eingabedatumsfiltern wird die Anzahl der Zeilen geรคndert. Es ist also dynamischer Natur.

Behandeln Sie die dynamische Tabelle in Selenium

Der Umgang mit statischen Tabellen ist einfach, der Umgang mit dynamischen Tabellen jedoch Selenium ist etwas schwierig, da Zeilen und Spalten nicht konstant sind.

Verwenden von X-Path zum Auffinden von Webtabellenelementen

Bevor wir das Webelement finden, wollen wir zunรคchst verstehen:

Was ist ein Webelement?

Webelemente sind nichts anderes als HTML-Elemente wie Textfelder, Dropdown-Optionsfelder, Sendeschaltflรคchen usw. Diese HTML-Elemente werden mit Anfang tag und endet mit einem Ende -Tag.

Beispielsweise,

Mein erstes HTML-Dokument.

Schritte zum Abrufen des X-Pfads des Webelements, das wir lokalisieren mรถchten.

Schritt 1) Gehen Sie in Chrome zu https://demo.guru99.com/test/web-table-element.php

Verwenden von X-Path zum Auffinden von Webtabellenelementen

Schritt 2) Klicken Sie mit der rechten Maustaste auf das Webelement, dessen X-Pfad abgerufen werden soll. In unserem Fall klicken Sie mit der rechten Maustaste auf โ€žUnternehmenโ€œ und wรคhlen die Option โ€žUntersuchenโ€œ. Der folgende Bildschirm wird angezeigt:

Verwenden von X-Path zum Auffinden von Webtabellenelementen

Schritt 3) Klicken Sie mit der rechten Maustaste auf das hervorgehobene Webelement > Wรคhlen Sie die Option โ€žKopierenโ€œ -> โ€žX-Pfad kopierenโ€œ.

Verwenden von X-Path zum Auffinden von Webtabellenelementen

Schritt 4) Verwenden Sie den kopierten X-Pfad โ€ž//*[@id=โ€œleftcontainerโ€œ]/table/thead/tr/th [1]โ€œ in Selenium WebDriver, um das Element zu finden.

Beispiel: Anzahl der Zeilen und Spalten aus Dynamic WebTable abrufen

Wรคhrend der dynamischen Webtabellenverarbeitung Selenium, kรถnnen wir die Anzahl der Zeilen und Spalten nicht vorhersagen.

Die Verwendung von Selenium Web-Treiber, kรถnnen wir finden

  • Anzahl der Zeilen und Spalten der Webtabelle in Selenium
  • Daten der X-Zeile oder Y-Spalte.

Nachfolgend finden Sie ein Programm zum Abrufen der Gesamtzahl der Zeilen und Spalten fรผr die Verarbeitung der Webtabelle Selenium:

Anzahl der Zeilen und Spalten abrufen

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 Erlรคuterung:

  • Hier haben wir zunรคchst das Web-Treiberobjekt โ€žwdโ€œ deklariert und es fรผr den Chrome-Treiber initialisiert.
  • Wir verwenden Liste zur Gesamtzahl der Spalten in โ€žcolโ€œ.
  • findElements-Befehle geben eine Liste ALLER Elemente zurรผck, die mit dem angegebenen Locator รผbereinstimmen
  • Mit findElements und X-path //*[@id=\โ€œleftcontainer\โ€œ]/table/thead/tr/th erhalten wir alle Spalten
  • Ebenso wiederholen wir den Vorgang fรผr Zeilen.

Ausgang:

Anzahl der Zeilen und Spalten abrufen

Beispiel: Zellwert einer bestimmten Zeile und Spalte der dynamischen Tabelle abrufen

Nehmen wir an, wir brauchen 3rd Zeile der Tabelle und die Daten ihrer zweiten Zelle. Siehe die Tabelle unten-

Zellwert einer bestimmten Zeile und Spalte abrufen

In der obigen Tabelle werden die Daten nach einiger Zeit regelmรครŸig aktualisiert. Die Daten, die Sie abzurufen versuchen, unterscheiden sich vom obigen Screenshot. Der Code bleibt jedoch derselbe. Hier ist ein Beispielprogramm, um die 3 zu erhaltenrd Reihe und 2nd Daten der Spalte.

Zellwert einer bestimmten Zeile und Spalte abrufen

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 Erlรคuterung:

  • Die Tabelle wird mithilfe der Locator-Eigenschaft โ€žtagnameโ€œ gefunden.
  • Die Verwendung von XPath โ€ž//*[@id=\โ€œleftcontainer\โ€œ]/table/tbody/tr[3]โ€œ finde die 3rd Zeile und ruft ihren Text mit der Funktion getText() ab
  • Suchen Sie mit Xpath โ€ž//*[@id=\โ€œleftcontainer\โ€œ]/table/tbody/tr[3]/td[2]โ€œ die 2. Zelle in 3rd Zeile und ruft ihren Text mit der Funktion getText() ab

Ausgang:

Zellwert einer bestimmten Zeile und Spalte der dynamischen Tabelle abrufen

Beispiel: Maximum aller Werte in einer Spalte einer dynamischen Tabelle abrufen

In diesem Beispiel erhalten wir das Maximum aller Werte in einer bestimmten Spalte.

Siehe folgende Tabelle โ€“

Ermitteln Sie das Maximum aller Werte in einer Spalte einer dynamischen Tabelle

Hier ist der Code

Ermitteln Sie das Maximum aller Werte in einer Spalte einer dynamischen Tabelle

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 Erlรคuterung:

  • Mit dem Chrome-Treiber suchen wir die Webtabelle und ermitteln die Gesamtzahl der Zeilen mithilfe von XPath โ€ž.//*[@id='leftcontainer']/table/tbody/tr/td[1]โ€œ
  • Mit der for-Schleife durchlaufen wir die Gesamtzahl der Zeilen und rufen nacheinander Werte ab. Um die nรคchste Zeile zu erhalten, verwenden wir (i+1) in XPath
  • Wir vergleichen den alten Wert mit dem neuen Wert und der Maximalwert wird am Ende der for-Schleife ausgegeben

Ausgabe

Ermitteln Sie das Maximum aller Werte in einer Spalte einer dynamischen Tabelle

Beispiel: Alle Werte einer dynamischen Tabelle abrufen

Betrachten Sie die folgende Tabelle: https://demo.guru99.com/test/table.html

Rufen Sie alle Werte einer dynamischen Tabelle ab

Die Anzahl der Spalten fรผr jede Zeile ist unterschiedlich.

Hier haben Zeile Nr. 1, 2 und 4 3 Zellen, Zeile Nr. 3 hat 2 Zellen und Zeile Nr. 5 hat 1 Zelle.

Wir mรผssen Werte aller Zellen erhalten

Hier ist der Code:

Rufen Sie alle Werte einer dynamischen Tabelle ab

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 Erlรคuterung:

  • rows_count gibt die Gesamtzahl der Zeilen an
  • Fรผr jede Zeile erhalten wir die Gesamtzahl der verwendeten Spalten rows_table.get(row).findElements(By.tagName("td"));
  • Wir durchlaufen jede Spalte und jede Zeile und rufen Werte ab.

Ausgang:

Rufen Sie alle Werte einer dynamischen Tabelle ab

Hรคufig gestellte Fragen

Eine Tabelle mit Zeilen oder Spalten, die sich zur Laufzeit per AJAX oder Filtern รคndern.

Die KI erkennt automatisch die Struktur, generiert XPath und korrigiert Selektoren selbst, wenn sich Spalten verschieben.

Ja. Copilot generiert zeilenweise XPath-Schleifen, getText extraction und Behauptungen.

//table[@id]//tr[ROW]/td[COL] mit Platzhaltern innerhalb von Schleifen.

Verwenden Sie WebDriverWait mit visibilityOfElementLocated fรผr die Tabelle.

Durchlaufe jede Zelle in der Spalte und analysiere den Text. track der hรถchste Wert.

Die Tabelle wurde neu gerendert. Elemente innerhalb der Schleife neu positionieren.

Verwenden Sie driver.findElements(By.xpath(โ€œ//table//trโ€)).size().

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: