Umgang mit Webtabellen in Selenium

โšก Intelligente Zusammenfassung

Selenium Die Web-Tabellenverarbeitung ermรถglicht es QA-Ingenieuren, tabellarische Daten aus HTML-Zeilen und -Spalten mithilfe von XPath, CSS und Selenium 4 relative Locatoren. Dieser Artikel behandelt statische Tabellen, verschachtelte Tabellen, Attributprรคdikate und KI-Techniken fรผr dynamische Raster.

  • ๐Ÿงฑ XPath-Anatomie: Jeder Tabellenlocator beginnt mit //table und navigiert mithilfe von Prรคdikaten in tbody, tr und td.
  • ๐Ÿ” Dynamische Zeilen: findElements gibt eine Liste von WebElements zurรผck, sodass Schleifen zur Laufzeit Zeilen zรคhlen und Zellen lesen kรถnnen.
  • ๐Ÿช„ Selenium 4: Relative Positionsangaben oberhalb, unterhalb und nahe vereinfachen die Auswahl von Zellen um ein bekanntes Ankerelement herum.
  • ๐Ÿง  KI-Ortungsgerรคte: Selbstheilende Tools erkennen Spaltenverschiebungen und stellen die Zeilenidentitรคt ohne manuelle XPath-ร„nderungen wieder her.
  • ๏ธ Verknรผpfung prรผfen: Die Browser-Entwicklertools kopieren einen vollstรคndigen XPath-Ausdruck, den Sie zur Gewรคhrleistung der Zuverlรคssigkeit auf die erste Tabelle zurรผckkรผrzen kรถnnen.

Selenium Webtabellen-XPath-Beispiel

Was ist eine Webtabelle? Selenium?

A Webtabelle in Selenium Eine WebElement-Tabelle dient der tabellarischen Darstellung von Daten oder Informationen. Die angezeigten Daten kรถnnen statisch oder dynamisch sein. Auf Tabellenzellen und -zeilen wird รผber WebElement-Methoden in Kombination mit Selektoren zugegriffen. Ein typisches Beispiel ist die Produktspezifikationstabelle auf einer E-Commerce-Produktseite.

Lesen einer HTML-Webtabelle

Tester mรผssen hรคufig auf Elemente, meist Textwerte, innerhalb von HTML-Tabellen zugreifen. Webdesigner vergeben jedoch selten ID- oder Namensattribute fรผr einzelne Zellen. Daher funktionieren Methoden wie `By.id()`, `By.name()` oder `By.cssSelector()` in der Regel nicht. In diesem Fall ist `By.xpath()` die zuverlรคssigste Option, da sie die Eltern-Kind-Beziehungen innerhalb des Tabellen-Tags durchlรคuft.

Umgang mit Webtabellen in Selenium

Betrachten Sie den folgenden HTML-Code fรผr die Verarbeitung von Webtabellen Selenium.

So schreiben Sie XPath fรผr eine Tabelle in Selenium

Wir werden verwenden XPath um den inneren Text der Zelle zu erhalten, die den Text โ€žvierte Zelleโ€œ enthรคlt.

So schreiben Sie XPath fรผr eine Tabelle in Selenium

Schritt 1 โ€“ Festlegen des รผbergeordneten Elements (Tabelle)

XPath-Locators in WebDriver beginnen immer mit einem doppelten Schrรคgstrich โ€ž//โ€œ, gefolgt vom รผbergeordneten Element.. Da es sich um Webtabellen in handelt Selenium, das รผbergeordnete Element sollte immer das sein Etikett. Der erste Teil unseres Selenium Der XPath-Tabellenlocator muss daher mit โ€ž//tableโ€œ beginnen.

Selenium Beispiel fรผr eine Webtabelle

Schritt 2 โ€“ Untergeordnete Elemente hinzufรผgen

Das Element direkt darunter Ist , Also ist das Kind von Umgekehrt ist das Elternteil von Alle Kindelemente in XPath werden rechts neben ihrem Elternelement platziert und durch einen Schrรคgstrich โ€ž/โ€œ getrennt, wie unten dargestellt.

Selenium Beispiel fรผr eine Webtabelle

Schritt 3 โ€“ Prรคdikate hinzufรผgen

Der Element enthรคlt zwei Tags. Diese beiden Tags sind Kinder von , Also ist der Elternteil von beiden. Die beiden Elemente sind Geschwister. Geschwister sind Kindelemente, die dasselbe Elternteil haben..

Um das zu erreichen die die โ€žvierte Zelleโ€œ enthรคlt, mรผssen wir zuerst darauf zugreifen. zweite nicht die erste. Wenn man nur โ€ž//table/tbody/trโ€œ schreibt, wรผrde man die erste Tabelle ansprechen. Etikett.

Wie greifen wir also auf die zweite zu? Die Antwort lautet: verwenden Prรคdikate. Prรคdikate sind Zahlen oder HTML-Attribute, die in eckigen Klammern โ€ž[ ]โ€œ eingeschlossen sind und ein Kindelement von seinen Geschwisterelementen unterscheiden.Da wir die zweite Zeile benรถtigen, verwenden wir โ€ž[2]โ€œ als Prรคdikat.

 Selenium Beispiel fรผr eine Webtabelle

Lรคsst man das Prรคdikat weg, gibt XPath das erste Geschwisterelement zurรผck. Daher erreichen beide der folgenden XPath-Codes das erste Element. Die

Selenium Webtabelle mit XPath

Schritt 4 โ€“ Fรผgen Sie die nachfolgenden untergeordneten Elemente mithilfe der entsprechenden Prรคdikate hinzu

Das nรคchste Element, das wir benรถtigen, ist das zweite. Durch Anwendung der Regeln aus Schritt 2 und 3 erhalten wir den unten gezeigten XPath.

Web-Tabelle in Selenium mit Xpath

Nachdem wir den korrekten XPath-Locator ermittelt haben, kรถnnen wir mithilfe des unten stehenden Codes auf die Zelle zugreifen und ihren Inhalt lesen. Dies setzt voraus, dass Sie die HTML-Seite unter dem Namen โ€žnewhtml.htmlโ€œ auf Ihrem Laufwerk C gespeichert haben.

Web-Tabelle in Selenium mit Xpath

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/write-xpath-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

Web-Tabelle in Selenium mit Xpath

Auf verschachtelte Tabellen zugreifen

Die gleichen Prinzipien gelten auch fรผr verschachtelte Tabellen. Verschachtelte Tabellen sind Tabellen, die in einer anderen Tabelle platziert sind.. Ein Beispiel ist unten dargestellt.

So greifen Sie auf verschachtelte Tabellen zu Selenium

Um auf die Zelle mit dem Text โ€ž4-5-6โ€œ zuzugreifen, kรถnnen wir mithilfe der Eltern-Kind- und Prรคdikatideen aus dem vorherigen Abschnitt den unten gezeigten XPath zusammensetzen.

So greifen Sie auf verschachtelte Tabellen zu Selenium

Der unten stehende WebDriver-Code ruft den inneren Text der Zielzelle ab.

Zugreifen auf verschachtelte Tabellen in Selenium

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/accessing-nested-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

Die folgende Ausgabe bestรคtigt, dass erfolgreich auf die innere Tabelle zugegriffen wurde.

Zugreifen auf verschachtelte Tabellen in Selenium

Attribute als Prรคdikate verwenden

Befindet sich das Element tief im HTML-Code, wo das Zรคhlen von Geschwisterelementen mรผhsam wird, kรถnnen wir stattdessen das eindeutige Attribut dieses Elements verwenden.

Im folgenden Beispiel ist die Zelle โ€žNew York nach Chicagoโ€œ weit im Inneren vergraben. Mercury Homepage von Tours.

Selenium Beispiel fรผr eine Webtabelle mit Attributen als Prรคdikaten

Selenium Beispiel fรผr eine Webtabelle mit Attributen als Prรคdikaten

Wir kรถnnen das eindeutige Attribut der Tabelle (width=โ€270โ€ณ) als Prรคdikat verwenden. Attribute werden als Prรคdikate verwendet, indem ihnen das @-Symbol vorangestellt wirdIm obigen Beispiel befindet sich die Zelle โ€žNew York nach Chicagoโ€œ im ersten des vierten Unser XPath sollte also wie der unten gezeigte aussehen.

Selenium Beispiel einer Webtabelle mit Attributen als Prรคdikaten

Denken Sie daran, dass Sie beim Einfรผgen des XPath-Ausdrucks Folgendes beachten sollten: JavaUm die doppelten Anfรผhrungszeichen um โ€ž270โ€œ zu maskieren, verwenden Sie einen Backslash, damit die Zeichenkette By.xpath() nicht vorzeitig beendet wird.

Selenium Beispiel einer Webtabelle mit Attributen als Prรคdikaten

Wir kรถnnen jetzt mit dem folgenden Code auf diese Zelle zugreifen.

Selenium Beispiel einer Webtabelle mit Attributen als Prรคdikaten

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table[@width=\"270\"]/tbody/tr[4]/td"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Selenium Beispiel einer Webtabelle mit Attributen als Prรคdikaten

Verknรผpfung: Verwenden Sie Inspect Element fรผr den Zugriff auf Tabellen in Selenium

Wenn der Index oder ein Attribut eines Elements schwer zu ermitteln ist, lรคsst sich der XPath am schnellsten mit Hilfe der Funktion โ€žElement untersuchenโ€œ in den Entwicklertools moderner Browser generieren.

Betrachten Sie das folgende Beispiel aus dem Mercury Homepage von Tours.

Selenium Beispiel einer Webtabelle mit Attributen als Prรคdikaten

Schritt 1:

Klicken Sie mit der rechten Maustaste auf die Zielzelle und wรคhlen Sie โ€žUntersuchenโ€œ, um den DOM-Pfad anzuzeigen. Kopieren Sie anschlieรŸend den vollstรคndigen XPath.

Selenium Beispiel einer Webtabelle mit Attributen als Prรคdikaten

Schritt 2:

Suchen Sie nach dem ersten รผbergeordneten Element โ€žTabelleโ€œ und lรถschen Sie alles links davon.

Selenium Beispiel einer Webtabelle mit Attributen als Prรคdikaten

Schritt 3:

Setzen Sie dem verbleibenden XPath einen doppelten Schrรคgstrich โ€ž//โ€œ voran und kopieren Sie ihn in Ihren WebDriver-Code.

Selenium Beispiel einer Webtabelle mit Attributen

Der unten stehende WebDriver-Code ruft den inneren Text des tief verschachtelten Elements ab.

Selenium Beispiel einer Webtabelle mit Attributen

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table/tbody/tr/td[2]"
        + "//table/tbody/tr[4]/td/"
        + "table/tbody/tr/td[2]/"
        + "table/tbody/tr[2]/td[1]/"
        + "table[2]/tbody/tr[3]/td[2]/font"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Wie man Zeilen und Spalten in einer dynamischen Webtabelle zรคhlt

Dynamische Webtabellen, wie Dashboards oder Suchergebnisse, rendern bei jedem Laden eine unterschiedliche Anzahl von Zeilen. Um dies zu handhaben, verwenden Sie findElements um alle Die Daten werden in einer Liste gespeichert und anschlieรŸend in einer Schleife durch jede Zelle gelesen. Der folgende Codeabschnitt zรคhlt die Zeilen und liest jede Zelle einer Tabelle, deren ID โ€žcustomersโ€œ lautet.

List<WebElement> rows = driver.findElements(
    By.xpath("//table[@id='customers']//tr"));
System.out.println("Total rows: " + rows.size());

for (int i = 1; i <= rows.size(); i++) {
    List<WebElement> cells = driver.findElements(
        By.xpath("//table[@id='customers']//tr[" + i + "]/td"));
    for (WebElement cell : cells) {
        System.out.println(cell.getText());
    }
}

Wickeln Sie den Ortungssensor in ein WebDriverWait und visibilityOfAllElementsLocatedBy Wenn die Tabelle per AJAX geladen wird, werden dadurch veraltete Elementreferenzen in langsam rendernden Tabellen vermieden.

Selenium 4 Relative Locators fรผr Webtabellen

Selenium Version 4 fรผhrte relative Selektoren ein, die Elemente anhand ihrer visuellen Position ansprechen. Sie sind nรผtzlich, wenn XPath-Indizes aufgrund einer Neuanordnung von Zeilen nicht mehr funktionieren. Die Methoden above(), below(), toLeftOf(), toRightOf() und near() Alle akzeptieren ein Anchor-WebElement.

import static org.openqa.selenium.support.locators.RelativeLocator.with;

WebElement emailHeader = driver.findElement(By.xpath("//th[text()='Email']"));
WebElement emailCell = driver.findElement(
    with(By.tagName("td")).below(emailHeader));
System.out.println(emailCell.getText());

Relative Locators bleiben auch bei verรคnderter Spaltenreihenfolge lesbar. Fรผr optimale Ergebnisse auf datenintensiven Seiten sollten sie mit expliziten Wartezeiten kombiniert werden.

KI-Tools fรผr die Handhabung dynamischer Webtabellen

KI-gestรผtzte Testplattformen reduzieren den Wartungsaufwand fรผr Ortungsgerรคte in Netzen, die sich hรคufig รคndern. Tools wie Testim, Mab und Funktionalisieren Mithilfe von Computer Vision und DOM-Modellen werden Spaltenverschiebungen und selbstheilende Locatoren erkannt. Zeilen werden anhand von Headertext und Zellenรคhnlichkeit anstatt fester XPath-Indizes identifiziert.

Fรผr reine Selenium Projekte, Bibliotheken wie Healenium UmschlieรŸen Sie den WebDriver und korrigieren Sie fehlerhafte Selektoren zur Laufzeit. Kombinieren Sie diese Tools mit WebDriverWait, um dynamische Tabellenskripte stabil zu halten, ohne Selektoren nach jeder UI-ร„nderung neu schreiben zu mรผssen.

Zusammenfassung

  • By.xpath() ist die zuverlรคssigste Methode, um auf Zellen einer Webtabelle zuzugreifen. Selenium.
  • Wenn das Zรคhlen von Geschwistern schwierig ist, verwenden Sie ein eindeutiges Attribut als Prรคdikat, dem das @-Symbol vorangestellt wird.
  • findElements gibt eine Liste zurรผck das die Zeilenzรคhlung in dynamischen Tabellen unterstรผtzt.
  • Selenium 4 relative Locatoren (oben, unten, nahe) reduzieren die Abhรคngigkeit von positionellen XPath-Ausdrรผcken.
  • Die Funktion โ€žElement untersuchenโ€œ in den Entwicklertools beschleunigt die XPath-Generierung fรผr tiefliegende Zellen.
  • KI-Tools wie Testim, Mabl und Healenium selbstheilende Lokalisierungsfunktionen fรผr sich รคndernde Raster.

Hรคufig gestellte Fragen

Eine Webtabelle in Selenium ist ein WebElement, das tabellarische Daten in Zeilen und Spalten anzeigt. Es kann statisch oder dynamisch sein. Tester greifen รผber WebElement-Methoden in Kombination mit XPath- oder CSS-Locators auf die Zellen zu, da Tabellen selten eindeutige IDs fรผr einzelne Zellen bereitstellen.

Die meisten Tabellenzellen besitzen kein ID- oder Namensattribut, daher funktionieren By.id() und By.name() nicht. XPath durchlรคuft die Eltern-Kind-Struktur von Tabellen-, tbody-, tr- und td-Elementen und ist somit der zuverlรคssigste Locator fรผr Zellen.

Verwenden Sie `driver.findElements(By.xpath(โ€œ//table[@id='tbl']//trโ€)).size()`, um Zeilen zu zรคhlen, und `//table[@id='tbl']//tr[1]/td`, um Spalten zu zรคhlen. Die Methode `findElements` gibt eine Liste zurรผck. unterstรผtzt size() fรผr schnelle Zeilensummen.

Selenium Version 4 fรผhrte relative Locatoren wie above(), below(), toLeftOf(), toRightOf() und near() ein. Sie helfen dabei, Zellen anzusprechen, die sich um eine bekannte Ankerzelle herum befinden, was nรผtzlich ist, wenn sich XPath-Indizes in dynamischen Tabellen รคndern.

Durchlaufe die Zeilen mit `findElements` und lies anschlieรŸend jede Zelle mit `getText()` aus. Erstelle dynamisch XPath-Ausdrรผcke mithilfe von Stringverkettung, z. B. `//tr[โ€œ+i+โ€]/td[โ€œ+j+โ€`. Warte mit `WebDriverWait`, bis die Tabelle geladen ist, bevor du die Werte liest.

Ja. KI-gestรผtzte Tools wie TestimMabl und Functionize nutzen Computer Vision und DOM-Modelle, um Tabellengrenzen zu erkennen, Spaltenรผberschriften abzuleiten und Spaltenverlagerungen automatisch zu korrigieren. Dies reduziert den Aufwand fรผr die XPath-Wartung dynamischer Dashboards.

KI-Modelle lernen Zeilenmuster aus vorherigen Durchlรคufen und ordnen Zellen anhand von Textรคhnlichkeit anstatt fester Indizes zu. Selbst wenn eine Zeile verschoben oder eine Spalte neu angeordnet wird, findet der KI-Locator das Ziel weiterhin, ohne den XPath-Ausdruck neu schreiben zu mรผssen.

`findElement` gibt ein einzelnes `WebElement` zurรผck und lรถst eine `NoSuchElementException` aus, falls dieses nicht gefunden wird. `findElements` gibt eine Liste zurรผck. und gibt eine leere Liste zurรผck, wenn keine รœbereinstimmung gefunden wird. Verwenden Sie `findElements`, wenn Sie suchen.ping รผber Tabellenzeilen oder -spalten.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: