Umgang mit dynamischen Webtabellen mithilfe von Selenium WebTreiber
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 richtigen 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-Erklärung:
- 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-Erklärung:
- Die Tabelle wird mithilfe der Locator-Eigenschaft „tagname“ gefunden.
- Die richtigen 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-Erklärung:
- 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-Erklärung:
- 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:
Zusammenfassung
- By.xpath() wird häufig für den Zugriff auf Tabellenelemente verwendet.
- Statische Webtabellen in Selenium sind konsistenter Natur. Das heißt, sie haben eine feste Anzahl von Zeilen sowie Zelldaten.
- Dynamische Webtabellen sind inkonsistent, dh sie verfügen nicht über eine feste Anzahl von Zeilen- und Zellendaten.
- Mit dem Selenium-Webtreiber können wir dynamische Webtabellen problemlos verarbeiten.
- Selenium Mit Webdriver können wir über sie auf dynamische Webtabellen zugreifen X-Weg