Hoe u met een webtabel omgaat Selenium

โšก Slimme samenvatting

Selenium Met Web Table Handling kunnen QA-engineers tabelgegevens uit HTML-rijen en -kolommen lezen met behulp van XPath, CSS en Selenium 4 relatieve locators. Dit artikel behandelt statische tabellen, geneste tabellen, attribuutpredicaten en AI-technieken voor dynamische grids.

  • ๐Ÿงฑ XPath Anatomie: Elke tabelzoeker begint met //table en navigeert via predicaten naar tbody, tr en td.
  • ๐Ÿ” Dynamische rijen: `findElements` retourneert een lijst met `WebElements`, zodat lussen tijdens de uitvoering rijen kunnen tellen en cellen kunnen lezen.
  • ๐Ÿช„ Selenium 4: Relatieve locators boven, onder en dichtbij vereenvoudigen het selecteren van cellen rond een bekend ankerelement.
  • ???? AI-locators: Zelfherstellende tools detecteren kolomverschuivingen en herstellen de rij-identiteit zonder handmatige XPath-bewerkingen.
  • ๏ธ Inspecteer snelkoppeling: Browser DevTools kopieert een volledig XPath-pad dat je voor meer betrouwbaarheid kunt inkorten tot de eerste tabel.

Selenium Webtabel XPath-voorbeeld

Wat is een webtabel? Selenium?

A Webtabel in Selenium Een tabel is een WebElement dat wordt gebruikt voor de tabelweergave van gegevens of informatie. De weergegeven gegevens kunnen statisch of dynamisch zijn. Tabelcellen en -rijen worden benaderd via WebElement-methoden in combinatie met locators. Een typisch voorbeeld is het raster met productspecificaties op een productpagina in een webshop.

Een HTML-webtabel lezen

Testers moeten vaak toegang krijgen tot elementen, meestal tekstwaarden, die zich in HTML-tabellen bevinden. Webdesigners voorzien individuele cellen echter zelden van een id- of name-attribuut. Daarom werken methoden zoals By.id(), By.name() of By.cssSelector() zelden. In dit geval is By.xpath() de meest betrouwbare optie, omdat deze de ouder-kindrelaties binnen de tabeltag doorloopt.

Hoe u met een webtabel omgaat Selenium

Overweeg de onderstaande HTML-code voor het verwerken van webtabellen Selenium.

Hoe XPath voor Tabel te schrijven Selenium

We zullen gebruiken XPath om de binnentekst te krijgen van de cel die de tekst 'vierde cel' bevat.

Hoe XPath voor Tabel te schrijven Selenium

Stap 1 โ€“ Stel het bovenliggende element in (tabel)

XPath-locators in WebDriver beginnen altijd met een dubbele schuine streep โ€œ//โ€, gevolgd door het ouderelement.. Omdat we te maken hebben met webtabellen in Selenium, moet het bovenliggende element altijd de label. Het eerste deel van onze Selenium De XPath-tabelzoeker moet daarom beginnen met โ€œ//tableโ€.

Selenium Voorbeeld van een webtabel

Stap 2 โ€“ Voeg de onderliggende elementen toe

Het element direct daaronder is , Dus is het kind van Omgekeerd, is de ouder van Alle kindelementen in XPath worden rechts van hun ouderelement geplaatst, gescheiden door een schuine streep "/" zoals hieronder weergegeven.

Selenium Voorbeeld van een webtabel

Stap 3 โ€“ Predikaten toevoegen

De element bevat twee labels. Deze twee tags zijn kinderen van , Dus is de ouder van beiden. De twee Elementen zijn broers en zussen. Broers en zussen zijn kinderen die dezelfde ouder hebben..

Om de die de "vierde cel" bevat, moeten we eerst toegang krijgen tot de tweede , niet de eerste. Door alleen โ€œ//table/tbody/trโ€ te schrijven, zou de eerste worden geselecteerd. label.

Hoe krijgen we dan toegang tot de tweede? Het antwoord is om te gebruiken predikaten. Predicaten zijn getallen of HTML-attributen tussen vierkante haken โ€œ[ ]โ€ die een kindelement onderscheiden van zijn broers en zussen.Omdat we de tweede rij nodig hebben, gebruiken we โ€œ[2]โ€ als predicaat.

 Selenium Voorbeeld van een webtabel

Als we het predicaat weglaten, retourneert XPath het eerste sibling-element. Daarom zal elk van de onderstaande XPath-codes het eerste sibling-element bereiken. .

Selenium Webtabel met Xpath

Stap 4 โ€“ Voeg de volgende onderliggende elementen toe met behulp van de juiste predikaten

Het volgende element dat we nodig hebben is de tweede. Door de regels uit stap 2 en 3 toe te passen, komen we uit op het onderstaande XPath-pad.

Webtabel in Selenium gebruik van Xpath

Nu we de juiste XPath-locator hebben, kunnen we de cel openen en de tekst erin lezen met behulp van de onderstaande code. Dit gaat ervan uit dat je de HTML-pagina hebt opgeslagen als "newhtml.html" op je C-schijf.

Webtabel in Selenium gebruik van 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();
}

Webtabel in Selenium gebruik van Xpath

Toegang tot geneste tabellen

Dezelfde principes gelden voor geneste tabellen. Geneste tabellen zijn tabellen die in een andere tabel zijn geplaatst.. Hieronder is een voorbeeld weergegeven.

Toegang krijgen tot geneste tabellen in Selenium

Om de cel met de tekst "4-5-6" te benaderen met behulp van de ouder/kind- en predicaatconcepten uit de vorige sectie, kunnen we de onderstaande XPath samenstellen.

Toegang krijgen tot geneste tabellen in Selenium

De onderstaande WebDriver-code haalt de tekst binnenin de geselecteerde cel op.

Toegang tot geneste 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();
}

De onderstaande uitvoer bevestigt dat de binnenste tabel met succes is geopend.

Toegang tot geneste tabellen in Selenium

Attributen gebruiken als predikaten

Als het element zich diep in de HTML bevindt, waardoor het tellen van de sibling-elementen lastig wordt, kunnen we in plaats daarvan het unieke attribuut van dat element gebruiken.

In het onderstaande voorbeeld bevindt de cel "New York naar Chicago" zich diep in de cel. Mercury Homepagina van rondleidingen.

Selenium Voorbeeld van een webtabel met attributen als predicaten

Selenium Voorbeeld van een webtabel met attributen als predicaten

We kunnen het unieke attribuut van de tabel (width=โ€270โ€ณ) als predicaat gebruiken. Attributen worden gebruikt als predicaten door ze vooraf te laten gaan door het @-symboolIn het bovenstaande voorbeeld bevindt de cel "New York naar Chicago" zich in de eerste rij. van de vierde Onze XPath zou er dus als volgt uit moeten zien.

Selenium Voorbeeld van een webtabel met attributen als predikaten

Onthoud dat wanneer je de XPath binnenin plaatst JavaOntsnap aan de dubbele aanhalingstekens rond "270" met een backslash, zodat de By.xpath()-string niet voortijdig wordt afgebroken.

Selenium Voorbeeld van een webtabel met attributen als predikaten

We zijn nu klaar om toegang te krijgen tot die cel met behulp van de onderstaande code.

Selenium Voorbeeld van een webtabel met attributen als predikaten

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 Voorbeeld van een webtabel met attributen als predikaten

Sneltoets: Gebruik Inspect Element voor toegang tot tabellen in Selenium

Als de index of het attribuut van een element moeilijk te achterhalen is, is de snelste manier om het XPath-pad te genereren door gebruik te maken van 'Element inspecteren' in de ontwikkelaarstools van moderne browsers.

Neem het onderstaande voorbeeld uit de Mercury Homepagina van rondleidingen.

Selenium Voorbeeld van een webtabel met attributen als predikaten

Stap 1

Klik met de rechtermuisknop op de betreffende cel en selecteer 'Inspecteren' om het DOM-pad te bekijken. Kopieer vervolgens het volledige XPath-pad.

Selenium Voorbeeld van een webtabel met attributen als predikaten

Stap 2

Zoek naar het eerste bovenliggende element 'tabel' en verwijder alles links ervan.

Selenium Voorbeeld van een webtabel met attributen als predikaten

Stap 3

Voeg een dubbele schuine streep โ€œ//โ€ toe aan het resterende XPath-pad en kopieer dit naar uw WebDriver-code.

Selenium Voorbeeld van een webtabel met attributen

De onderstaande WebDriver-code haalt de interne tekst van het diep geneste element op.

Selenium Voorbeeld van een webtabel met 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();
}

Hoe tel je rijen en kolommen in een dynamische webtabel?

Dynamische webtabellen, zoals dashboards of zoekresultaten, tonen bij elke laadbeurt een verschillend aantal rijen. Om hiermee om te gaan, kunt u het volgende gebruiken: findElements om alles op te halen in een lijst, en vervolgens doorloop je elke cel om deze te lezen. Het onderstaande codefragment telt rijen en leest elke cel in een tabel met de id "customers".

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());
    }
}

Wikkel de locator in een WebDriverWait with visibilityOfAllElementsLocatedBy Dit wordt toegepast wanneer de tabel via AJAX wordt geladen. Dit voorkomt verouderde elementverwijzingen in grids die traag laden.

Selenium 4 Relatieve locators voor webtabellen

Selenium In paragraaf 4 werden relatieve locators geรฏntroduceerd die elementen targeten op basis van hun visuele positie. Deze zijn handig wanneer XPath-indexen niet meer werken omdat rijen opnieuw worden gerangschikt. De methoden above(), below(), toLeftOf(), toRightOf()en near() Ze accepteren allemaal een anker-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());

Relatieve locators blijven leesbaar, zelfs wanneer de kolomvolgorde verandert. Combineer ze met expliciete wachtinstructies voor de beste resultaten op datagestuurde pagina's.

AI-tools voor het verwerken van dynamische webpagina's

Door AI ondersteunde testplatforms verminderen het onderhoud van locatiesystemen op grids die vaak veranderen. Tools zoals Testim, Mablen Functioneren Ze gebruiken computervisie in combinatie met DOM-modellen om kolomverschuivingen en zelfherstellende locators te detecteren. Ze identificeren rijen op basis van koptekst en celgelijkenis in plaats van vaste XPath-indexen.

Voor puur Selenium projecten, bibliotheken zoals Healenium Wikkel de WebDriver in en herschrijf defecte locators tijdens runtime. Combineer deze tools met WebDriverWait om scripts voor dynamische tabellen stabiel te houden zonder selectors na elke UI-wijziging opnieuw te hoeven schrijven.

Samenvatting

  • By.xpath() is de meest betrouwbare manier om toegang te krijgen tot cellen van een webtabel. Selenium.
  • Als het tellen van broers en zussen lastig is, gebruik dan een uniek attribuut als predicaat, voorafgegaan door het @-symbool.
  • findElements retourneert een lijst. dat het tellen van rijen in dynamische tabellen ondersteunt.
  • Selenium 4 relatieve locators (boven, onder, dichtbij) verminderen de afhankelijkheid van positionele XPath.
  • Inspect Element in DevTools versnelt de XPath-generatie voor diepgelegen cellen.
  • AI-hulpmiddelen zoals TestimMabl en Healenium zijn zelfherstellende locators voor veranderende grids.

Veelgestelde vragen

Een webtabel in Selenium Een tabel is een WebElement dat tabelgegevens in rijen en kolommen weergeeft. Het kan statisch of dynamisch zijn. Testers hebben toegang tot de cellen via WebElement-methoden in combinatie met XPath of CSS-locators, omdat tabellen zelden unieke ID's op individuele cellen tonen.

De meeste tabelcellen hebben geen id- of name-attribuut, dus By.id() en By.name() werken niet. XPath doorloopt de ouder-kindstructuur van tabel-, tbody-, tr- en td-elementen, waardoor het de meest betrouwbare manier is om cellen te lokaliseren.

Gebruik `driver.findElements(By.xpath(โ€œ//table[@id='tbl']//trโ€)).size()` om het aantal rijen te tellen en `//table[@id='tbl']//tr[1]/td` om het aantal kolommen te tellen. De `findElements`-methode retourneert een lijst. die size() ondersteunt voor snelle rijtotalen.

Selenium In paragraaf 4 werden relatieve locators geรฏntroduceerd, zoals above(), below(), toLeftOf(), toRightOf() en near(). Deze helpen bij het targeten van cellen die zich rond een bekende ankercel bevinden, wat handig is wanneer XPath-indexen veranderen in dynamische tabellen.

Loop door de rijen met findElements en lees vervolgens elke cel met getText(). Bouw dynamisch XPath op met behulp van tekenreeksconcatenatie, bijvoorbeeld //tr[โ€œ+i+โ€]/td[โ€œ+j+โ€]. Wacht tot de tabel is geladen met WebDriverWait voordat de waarden worden gelezen.

Ja. AI-gestuurde tools zoals TestimMabl en Functionize gebruiken computervisie en DOM-modellen om tabelgrenzen te detecteren, kopteksten af โ€‹โ€‹te leiden en locators automatisch te herstellen wanneer kolommen verschuiven. Dit vermindert het onderhoud van XPath voor dynamische dashboards.

AI-modellen leren rijpatronen uit eerdere uitvoeringen en matchen cellen op basis van tekstgelijkenis in plaats van vaste indexen. Wanneer een rij verschuift of een kolom opnieuw wordt gerangschikt, vindt de AI-locator het doel nog steeds zonder de XPath te hoeven herschrijven.

findElement retourneert รฉรฉn WebElement en genereert een NoSuchElementException als het ontbreekt. findElements retourneert een List. en retourneert een lege lijst als er geen overeenkomst wordt gevonden. Gebruik findElements bij het zoeken.ping over tabelrijen of -kolommen.

Vat dit bericht samen met: