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.

Web-Tabelle in Selenium
Es gibt zwei Arten von HTML-Tabellen, die im Internet verรถffentlicht werden:
- Statische Tabellen: Die Daten sind statisch, dh die Anzahl der Zeilen und Spalten ist festgelegt.
- 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.
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
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:
Schritt 3) Klicken Sie mit der rechten Maustaste auf das hervorgehobene Webelement > Wรคhlen Sie die Option โKopierenโ -> โX-Pfad kopierenโ.
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:
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:
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-
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.
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:
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 โ
Hier ist der Code
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
Beispiel: Alle Werte einer dynamischen Tabelle abrufen
Betrachten Sie die folgende Tabelle: https://demo.guru99.com/test/table.html
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:
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:















