Sådan håndteres webtabel i Selenium

⚡ Smart opsummering

Selenium Webtabellhåndtering giver QA-ingeniører mulighed for at læse tabeldata fra HTML-rækker og -kolonner ved hjælp af XPath, CSS og Selenium 4 relative lokatorer. Denne artikel gennemgår statiske tabeller, indbyggede tabeller, attributprædikater og AI-teknikker til dynamiske gitre.

  • 🧱 XPath-anatomi: Enhver tabellokator starter med //table og undersøger tbody, tr og td ved hjælp af prædikater.
  • 🔁 Dynamiske rækker: findElements returnerer en liste over WebElements, så løkker kan tælle rækker og læse celler under kørsel.
  • 🪄 Selenium 4: Relative lokatorer over, under og nær forenkler målretning af celler omkring et kendt ankerelement.
  • 🧠 AI-lokaliseringssystemer: Selvreparerende værktøjer registrerer kolonneskift og gendanner rækkeidentitet uden manuelle XPath-redigeringer.
  • 🛠️ Undersøg genvej: Browser DevTools kopierer en fuld XPath, som du kan trimme tilbage til den første tabel for pålidelighed.

Selenium Eksempel på webtabel XPath

Hvad er en webtabel i Selenium?

A Web tabel in Selenium er et WebElement, der bruges til tabelrepræsentation af data eller information. De viste data kan enten være statiske eller dynamiske. Webtabelceller og -rækker tilgås via WebElement-metoder kombineret med locators. Et typisk eksempel er produktspecifikationsgitteret vist på en e-handelsproduktside.

Læsning af en HTML-webtabel

Der er mange tilfælde, hvor testere har brug for at få adgang til elementer, normalt tekstværdier, der er placeret i HTML-tabeller. Webdesignere angiver dog sjældent en id- eller name-attribut på individuelle celler. Derfor fungerer metoder som By.id(), By.name() eller By.cssSelector() sjældent. I dette scenarie er den mest pålidelige mulighed By.xpath(), fordi den fører forældre-barn-relationerne inde i tabeltagget.

Sådan håndteres webtabel i Selenium

Overvej HTML-koden nedenfor til håndtering af webtabeller i Selenium.

Sådan skriver du XPath til tabel i Selenium

Vi vil bruge XPath for at få den indre tekst i cellen, der indeholder teksten "fjerde celle".

Sådan skriver du XPath til tabel i Selenium

Trin 1 – Indstil det overordnede element (tabel)

XPath-lokaliseringsværktøjer i WebDriver starter altid med et dobbelt skråstreg "//" efterfulgt af det overordnede element.. Da vi har at gøre med webtabeller i Selenium, skal det overordnede element altid være tag. Den første del af vores Selenium XPath-tabelfinderen skal derfor starte med “//tabel”.

Selenium Eksempel på webtabel

Trin 2 – Tilføj de underordnede elementer

Elementet direkte under er , så er barn af Omvendt, er forælder til Alle underordnede elementer i XPath placeres til højre for deres overordnede element, adskilt af et skråstreg “/” som vist nedenfor.

Selenium Eksempel på webtabel

Trin 3 – Tilføj prædikater

De elementet indeholder to tags. Disse to tags er børn af , så er forælder til begge. De to elementerne er søskende. Søskende er underordnede elementer, der deler den samme forælder.

For at nå frem til der indeholder "fjerde celle", skal vi først tilgå anden , ikke den første. Hvis man kun skriver “//table/tbody/tr” ville det være den første, der mærke.

Så hvordan får vi adgang til den anden Svaret er at bruge Prædikater. Prædikater er tal eller HTML-attributter omsluttet af firkantede parenteser “[]”, der adskiller et underelement fra dets søskende.Da den række vi skal bruge er den anden, bruger vi “[2]” som prædikat.

 Selenium Eksempel på webtabel

Hvis vi udelader prædikatet, returnerer XPath den første søskende. Derfor vil en af ​​XPath-koderne nedenfor nå den første .

Selenium Webtabel ved hjælp af Xpath

Trin 4 – Tilføj de efterfølgende underordnede elementer ved hjælp af de passende prædikater

Det næste element, vi har brug for, er det andet Ved at anvende reglerne fra trin 2 og 3 kommer vi frem til den XPath, der er vist nedenfor.

Webtabel i Selenium ved hjælp af Xpath

Nu hvor vi har den korrekte XPath-locator, kan vi tilgå cellen og læse dens indre tekst ved hjælp af koden nedenfor. Dette forudsætter, at du har gemt HTML-siden som "newhtml.html" på dit C-drev.

Webtabel i Selenium ved hjælp af 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 i Selenium ved hjælp af Xpath

Adgang til indlejrede tabeller

De samme principper gælder for indbyggede tabeller. Indlejrede tabeller er tabeller placeret inde i en anden tabel. Et eksempel er vist nedenfor.

Sådan får du adgang til indlejrede tabeller i Selenium

For at få adgang til cellen med teksten "4-5-6" ved hjælp af forælder/underordnet- og prædikatidéerne fra det foregående afsnit, kan vi sammensætte den XPath, der er vist nedenfor.

Sådan får du adgang til indlejrede tabeller i Selenium

WebDriver-koden nedenfor henter den indre tekst i den pågældende celle.

Adgang til indlejrede tabeller i 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();
}

Outputtet nedenfor bekræfter, at den indre tabel blev tilgået.

Adgang til indlejrede tabeller i Selenium

Brug af attributter som prædikater

Hvis elementet sidder dybt inde i HTML-koden, hvor det bliver smertefuldt at tælle søskende, kan vi i stedet bruge elementets unikke attribut.

I eksemplet nedenfor er cellen "New York til Chicago" begravet langt inde i Mercury Tours hjemmeside.

Selenium Eksempel på webtabel, der bruger attributter som prædikater

Selenium Eksempel på webtabel, der bruger attributter som prædikater

Vi kan bruge tabellens unikke attribut (width=”270″) som prædikat. Attributter bruges som prædikater ved at sætte @-symbolet foran demI eksemplet ovenfor er cellen "New York til Chicago" placeret i den første af den fjerde , så vores XPath burde se ud som den, der er vist nedenfor.

Selenium Eksempel på webtabel med attributter som prædikater

Husk det, når du indsætter XPath'en Java, omgå de dobbelte anførselstegn omkring “270” med et omvendt skråstreg, så By.xpath()-strengen ikke afsluttes tidligt.

Selenium Eksempel på webtabel med attributter som prædikater

Vi er nu klar til at få adgang til den celle ved hjælp af koden nedenfor.

Selenium Eksempel på webtabel med attributter som prædikater

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 Eksempel på webtabel med attributter som prædikater

Genvej: Brug Inspect Element for at få adgang til tabeller i Selenium

Hvis indekset eller attributten for et element er svær at finde, er den hurtigste måde at generere XPath på ved at bruge Inspect Element i moderne browser DevTools.

Overvej eksemplet nedenfor fra Mercury Tours hjemmeside.

Selenium Eksempel på webtabel med attributter som prædikater

Trin 1

Højreklik på målcellen, og vælg Undersøg for at se DOM-stien, og kopier derefter den fulde XPath.

Selenium Eksempel på webtabel med attributter som prædikater

Trin 2

Se efter det første "tabel"-overordnede element, og slet alt til venstre for det.

Selenium Eksempel på webtabel med attributter som prædikater

Trin 3

Sæt præfikset "//" foran den resterende XPath, og kopier det ind i din WebDriver-kode.

Selenium Eksempel på webtabel med attributter

WebDriver-koden nedenfor henter den indre tekst i det dybt indlejrede element.

Selenium Eksempel på webtabel med attributter

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

Sådan tæller du rækker og kolonner i en dynamisk webtabel

Dynamiske webtabeller, såsom dashboards eller søgeresultater, gengiver forskellige antal rækker ved hver indlæsning. Brug dem til at håndtere dem findElements at hente hver ind i en liste, og gentag derefter løkken for at læse hver celle. Kodestykket nedenfor tæller rækker og læser hver celle i en tabel, hvis id er "kunder".

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

Pak lokaliseringsenheden ind i en WebDriverWait med visibilityOfAllElementsLocatedBy når tabellen indlæses af AJAX. Dette forhindrer forældede elementreferencer på langsomt gengivne gitre.

Selenium 4 Relative lokaliseringspunkter for webtabeller

Selenium 4 introducerede relative lokaliseringsværktøjer, der målretter elementer efter visuel position. De er nyttige, når XPath-indekser bryder, fordi rækkerne omarrangeres. Metoderne above(), below(), toLeftOf(), toRightOf()og near() alle accepterer et 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());

Relative lokatorer forbliver læsbare, når kolonnerækkefølgen ændres. Kombinér dem med eksplicitte ventetider for at få de stærkeste resultater på datadrevne sider.

AI-værktøjer til håndtering af dynamiske webtabeller

AI-assisterede testplatforme reducerer vedligeholdelse af lokaliseringssystemer på net, der ofte ændrer sig. Værktøjer som f.eks. Testim, Mablog Funktioner Brug computer vision plus DOM-modeller til at detektere kolonneskift og selvreparerende lokatorer. De identificerer rækker efter headertekst og cellelighed i stedet for faste XPath-indekser.

For ren Selenium projekter, biblioteker som f.eks. Healenium Indpak WebDriveren og omskriv defekte locators under kørsel. Kombiner disse værktøjer med WebDriverWait for at holde dynamiske tabelscripts stabile uden at omskrive selektorer efter hver ændring af brugergrænsefladen.

Resumé

  • By.xpath() er den mest pålidelige måde at få adgang til celler i en webtabel i Selenium.
  • Hvis det er svært at tælle søskende, skal du bruge en unik attribut som prædikat med @-tegnet som præfiks.
  • findElements returnerer en liste der understøtter rækketælling i dynamiske tabeller.
  • Selenium 4 relative lokatorer (over, under, nær) reducerer afhængigheden af ​​positionel XPath.
  • Inspect Element i DevTools accelererer XPath-generering for dybt begravede celler.
  • AI værktøjer som f.eks Testim, Mabl og Healenium selvreparerende lokaliseringsværktøjer til ændring af gitre.

Ofte Stillede Spørgsmål

En webtabel i Selenium er et WebElement, der viser tabeldata i rækker og kolonner. Det kan være statisk eller dynamisk. Testere tilgår dets celler via WebElement-metoder kombineret med XPath- eller CSS-lokaliseringsværktøjer, fordi tabeller sjældent viser unikke ID'er på individuelle celler.

De fleste tabelceller har ikke en id- eller name-attribut, så By.id() og By.name() vil ikke fungere. XPath gennemløber forældre-barn-strukturen af ​​table-, tbody-, tr- og td-elementerne, hvilket gør den til den mest pålidelige søgemaskine til celler.

Brug driver.findElements(By.xpath(“//table[@id='tbl']//tr”)).size() til at tælle rækker og //table[@id='tbl']//tr[1]/td til kolonneantal. findElements-metoden returnerer en liste der understøtter size() til hurtige rækketotaler.

Selenium Version 4 introducerede relative lokatorer som above(), below(), toLeftOf(), toRightOf() og near(). De hjælper med at målrette celler placeret omkring en kendt ankercelle, hvilket er nyttigt, når XPath-indekser ændres i dynamiske tabeller.

Gennemgå rækker i en løkke med findElements, og læs derefter hver celle med getText(). Byg XPath dynamisk ved hjælp af strengsammenkædning såsom //tr[“+i+”]/td[“+j+”]. Vent på, at tabellen indlæses med WebDriverWait, før værdier læses.

Ja. AI-drevne værktøjer som f.eks. Testim, Mabl og Functionize bruger computer vision og DOM-modeller til at detektere tabelgrænser, udlede headere og selvreparerende lokatorer, når kolonner forskydes. Dette reducerer XPath-vedligeholdelse for dynamiske dashboards.

AI-modeller lærer rækkemønstre fra tidligere kørsler og matcher celler ved hjælp af tekstlighed i stedet for faste indeks. Når en række flyttes, eller en kolonne ændres rækkefølge, finder AI-lokaliseringsværktøjet stadig målet uden at omskrive XPath.

findElement returnerer et enkelt WebElement og udløser NoSuchElementException, hvis det mangler. findElements returnerer en liste og returnerer en tom liste, hvis der ikke findes noget match. Brug findElements, når du søgerping over tabelrækker eller -kolonner.

Opsummer dette indlæg med: