Hur man hanterar webbtabell i Selenium

โšก Smart sammanfattning

Selenium Webbtabellhantering lรฅter QA-ingenjรถrer lรคsa tabelldata frรฅn HTML-rader och -kolumner med hjรคlp av XPath, CSS och Selenium 4 relativa positionerare. Den hรคr artikeln gรฅr igenom statiska tabeller, kapslade tabeller, attributpredikat och AI-tekniker fรถr dynamiska rutnรคt.

  • ๐Ÿงฑ XPath-anatomi: Varje tabellsรถkare bรถrjar med //table och borrar i tbody, tr och td med hjรคlp av predikat.
  • ๐Ÿ” Dynamiska rader: findElements returnerar en lista med WebElements sรฅ att loopar kan rรคkna rader och lรคsa celler vid kรถrning.
  • ๐Ÿช„ Selenium 4: Relativa positioner ovanfรถr, under och nรคra fรถrenklar inriktning av celler runt ett kรคnt ankarelement.
  • ๐Ÿง  AI-lokalisering: Sjรคlvlรคkande verktyg upptรคcker kolumnfรถrskjutningar och รฅterstรคller radidentitet utan manuella XPath-redigeringar.
  • ๐Ÿ› ๏ธ Inspektera genvรคg: Browser DevTools kopierar en fullstรคndig XPath som du kan trimma tillbaka till den fรถrsta tabellen fรถr tillfรถrlitlighet.

Selenium Exempel pรฅ webbtabell XPath

Vad รคr en webbtabell i Selenium?

A Webbtabell in Selenium รคr ett WebElement som anvรคnds fรถr tabellformad representation av data eller information. Data som visas kan vara antingen statiska eller dynamiska. Webbtabellceller och rader nรฅs via WebElement-metoder i kombination med positionerare. Ett typiskt exempel รคr produktspecifikationsrutnรคtet som visas pรฅ en e-handelsproduktsida.

Lรคsa en HTML-webbtabell

Det finns mรฅnga tillfรคllen dรฅ testare behรถver komma รฅt element, vanligtvis textvรคrden, som finns inuti HTML-tabeller. Webbdesigners tillhandahรฅller dock sรคllan ett id- eller name-attribut pรฅ enskilda celler. Dรคrfรถr fungerar metoder som By.id(), By.name() eller By.cssSelector() sรคllan. I det hรคr scenariot รคr det mest tillfรถrlitliga alternativet By.xpath() eftersom det leder fรถrรคlder-barn-relationerna inuti tabelltaggen.

Hur man hanterar webbtabell i Selenium

Tรคnk pรฅ HTML-koden nedan fรถr att hantera webbtabeller i Selenium.

Hur man skriver XPath fรถr tabell i Selenium

Vi kommer anvรคnda XPath fรถr att fรฅ den inre texten i cellen som innehรฅller texten "fjรคrde cellen".

Hur man skriver XPath fรถr tabell i Selenium

Steg 1 โ€“ Stรคll in det รถverordnade elementet (tabell)

XPath-lokaliseringar i WebDriver bรถrjar alltid med ett dubbelt snedstreck "//" fรถljt av fรถrรคldraelementet.. Eftersom vi har att gรถra med webbtabeller i Selenium, bรถr det รถverordnade elementet alltid vara mรคrka. Den fรถrsta delen av vรฅr Selenium XPath-tabellsรถkaren mรฅste dรคrfรถr bรถrja med โ€œ//tabellโ€.

Selenium Exempel pรฅ webbtabell

Steg 2 โ€“ Lรคgg till de underordnade elementen

Elementet direkt under รคr , sรฅ รคr barnet till Omvรคnt, รคr fรถrรคlder till Alla underordnade element i XPath placeras till hรถger om sitt รถverordnade element, separerade med ett snedstreck "/" som visas nedan.

Selenium Exempel pรฅ webbtabell

Steg 3 โ€“ Lรคgg till predikat

De elementet innehรฅller tvรฅ taggar. Dessa tvรฅ taggarna รคr underordnade , sรฅ รคr fรถrรคlder till bรฅda. De tvรฅ elementen รคr syskon. Syskon รคr underordnade element som delar samma fรถrรคlder.

Fรถr att nรฅ som innehรฅller "fjรคrde cellen", mรฅste vi fรถrst komma รฅt 2:a , inte den fรถrsta. Att bara skriva "//table/tbody/tr" skulle rikta in sig pรฅ den fรถrsta mรคrka.

Sรฅ hur fรฅr vi tillgรฅng till den andra Svaret รคr att anvรคnda Predikat. Predikat รคr siffror eller HTML-attribut inom hakparenteser "[]" som skiljer ett underordnat element frรฅn dess syskon.Eftersom raden vi behรถver รคr den andra, anvรคnder vi "[2]" som predikat.

 Selenium Exempel pรฅ webbtabell

Om vi โ€‹โ€‹utelรคmnar predikatet returnerar XPath det fรถrsta syskonet. Dรคrfรถr kommer endera av XPath-koderna nedan att nรฅ det fรถrsta .

Selenium Webbtabell med Xpath

Steg 4 โ€“ Lรคgg till de efterfรถljande underordnade elementen med hjรคlp av lรคmpliga predikat

Nรคsta element vi behรถver รคr det andra Genom att tillรคmpa reglerna frรฅn steg 2 och 3 kommer vi fram till XPath som visas nedan.

Webbtabell in Selenium anvรคnder Xpath

Nu nรคr vi har rรคtt XPath-lokaliseringsverktyg kan vi komma รฅt cellen och lรคsa dess inre text med hjรคlp av koden nedan. Detta fรถrutsรคtter att du har sparat HTML-sidan som "newhtml.html" pรฅ din C-enhet.

Webbtabell in Selenium anvรคnder 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();
}

Webbtabell in Selenium anvรคnder Xpath

ร…tkomst till kapslade tabeller

Samma principer gรคller fรถr kapslade tabeller. Kapslade tabeller รคr tabeller placerade inuti en annan tabell. Ett exempel visas nedan.

Sรฅ hรคr fรฅr du รฅtkomst till kapslade tabeller i Selenium

Fรถr att komma รฅt cellen med texten "4-5-6" med hjรคlp av fรถrรคlder-/barn- och predikatidรฉerna frรฅn fรถregรฅende avsnitt kan vi komponera XPath som visas nedan.

Sรฅ hรคr fรฅr du รฅtkomst till kapslade tabeller i Selenium

WebDriver-koden nedan hรคmtar den inre texten i den aktuella cellen.

ร…tkomst till kapslade 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();
}

Utdata nedan bekrรคftar att den inre tabellen lyckades nรฅs.

ร…tkomst till kapslade tabeller i Selenium

Anvรคnda attribut som predikat

Om elementet sitter djupt inne i HTML-koden, dรคr det blir smรคrtsamt att rรคkna syskon, kan vi anvรคnda elementets unika attribut istรคllet.

I exemplet nedan รคr cellen "New York till Chicago" begravd lรฅngt inuti Mercury Tours hemsida.

Selenium Webbtabellexempel med attribut som predikat

Selenium Webbtabellexempel med attribut som predikat

Vi kan anvรคnda tabellens unika attribut (width=โ€270โ€ณ) som predikat. Attribut anvรคnds som predikat genom att prefixet @-symbolenI exemplet ovan finns cellen โ€New York till Chicagoโ€ i den fรถrsta av den fjรคrde , sรฅ vรฅr XPath bรถr se ut som den som visas nedan.

Selenium Webbtabellexempel med Attributes as Predicates

Kom ihรฅg att nรคr du lรคgger in XPath-filen Java, omvandla citattecken runt "270" med ett bakรฅtsnedstreck sรฅ att By.xpath()-strรคngen inte avslutas i fรถrtid.

Selenium Webbtabellexempel med Attributes as Predicates

Vi รคr nu redo att komma รฅt den cellen med koden nedan.

Selenium Webbtabellexempel med Attributes as Predicates

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 Webbtabellexempel med Attributes as Predicates

Genvรคg: Anvรคnd Inspektera element fรถr att komma รฅt tabeller i Selenium

Om indexet eller attributet fรถr ett element รคr svรฅrt att fรฅ tag pรฅ รคr det snabbaste sรคttet att generera XPath att anvรคnda Inspect Element i moderna webblรคsares DevTools.

Betrakta exemplet nedan frรฅn Mercury Tours hemsida.

Selenium Webbtabellexempel med Attributes as Predicates

steg 1

Hรถgerklicka pรฅ mรฅlcellen och vรคlj Inspektera fรถr att visa DOM-sรถkvรคgen och kopiera sedan hela XPath-filen.

Selenium Webbtabellexempel med Attributes as Predicates

steg 2

Leta efter det fรถrsta "tabell" รถverordnade elementet och ta bort allt till vรคnster om det.

Selenium Webbtabellexempel med Attributes as Predicates

steg 3

Prefixera รฅterstรฅende XPath med dubbelt snedstreck "//" och kopiera det till din WebDriver-kod.

Selenium Webbtabellexempel med attribut

WebDriver-koden nedan hรคmtar den inre texten i det djupt kapslade elementet.

Selenium Webbtabellexempel med attribut

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

Hur man rรคknar rader och kolumner i en dynamisk webbtabell

Dynamiska webbtabeller, som instrumentpaneler eller sรถkresultat, renderar olika antal rader vid varje inlรคsning. Anvรคnd fรถr att hantera dem findElements att hรคmta varje in i en lista och loopa sedan igenom fรถr att lรคsa varje cell. Kodavsnittet nedan rรคknar rader och lรคser varje cell i en tabell vars id รคr "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());
    }
}

Linda in lokaliseringsanordningen i en WebDriverWait med visibilityOfAllElementsLocatedBy nรคr tabellen laddas av AJAX. Detta fรถrhindrar inaktuella elementreferenser pรฅ lรฅngsamt รฅtergivande rutnรคt.

Selenium 4 Relativa lokaliseringspunkter fรถr webbtabeller

Selenium 4 introducerade relativa positioner som riktar in sig pรฅ element efter visuell position. De รคr anvรคndbara nรคr XPath-index bryts pรฅ grund av att rader รคr omordnade. Metoderna above(), below(), toLeftOf(), toRightOf()och near() alla accepterar ett ankare 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());

Relativa positioner fรถrblir lรคsbara รคven nรคr kolumnordningen รคndras. Kombinera dem med explicita vรคntetider fรถr de starkaste resultaten pรฅ datadrivna sidor.

AI-verktyg fรถr hantering av dynamiska webbtabeller

AI-assisterade testplattformar minskar underhรฅllet av lokaliseringsenheter pรฅ nรคt som รคndras ofta. Verktyg som Testim, Mabloch Funktionera anvรคnder datorseende plus DOM-modeller fรถr att upptรคcka kolumnfรถrskjutningar och sjรคlvlรคkande positioner. De identifierar rader genom rubriktext och celllikhet snarare รคn fasta XPath-index.

Fรถr ren Selenium projekt, bibliotek som t.ex. Healenium Slรฅ om WebDriver och skriv om trasiga locatorer vid kรถrning. Kombinera dessa verktyg med WebDriverWait fรถr att hรฅlla dynamiska tabellskript stabila utan att skriva om selektorer efter varje UI-รคndring.

Sammanfattning

  • By.xpath() รคr det mest pรฅlitliga sรคttet att komma รฅt celler i en webbtabell i Selenium.
  • Om det รคr svรฅrt att rรคkna syskon, anvรคnd ett unikt attribut som predikat, med @-tecknet som prefix.
  • findElements returnerar en lista som stรถder radrรคkning i dynamiska tabeller.
  • Selenium 4 relativa positioner (ovan, nedan, nรคra) minskar beroendet av positionell XPath.
  • Inspect Element i DevTools accelererar XPath-generering fรถr djupt begravda celler.
  • AI-verktyg som t.ex Testim, Mabl och Healenium sjรคlvlรคkande lokaliseringsverktyg fรถr att รคndra nรคt.

Vanliga frรฅgor

En webbtabell i Selenium รคr ett WebElement som visar tabelldata i rader och kolumner. Det kan vara statiskt eller dynamiskt. Testare kommer รฅt dess celler via WebElement-metoder i kombination med XPath- eller CSS-lokaliseringar eftersom tabeller sรคllan exponerar unika ID:n pรฅ enskilda celler.

De flesta tabellceller har inte attributet id eller name, sรฅ By.id() och By.name() fungerar inte. XPath gรฅr igenom fรถrรคldra-barn-strukturen fรถr table-, tbody-, tr- och td-elementen, vilket gรถr den till den mest pรฅlitliga sรถkaren fรถr celler.

Anvรคnd driver.findElements(By.xpath(โ€œ//table[@id='tbl']//trโ€)).size() fรถr att rรคkna rader och //table[@id='tbl']//tr[1]/td fรถr kolumnantal. Metoden findElements returnerar en lista som stรถder size() fรถr snabba radsummeringar.

Selenium 4 introducerade relativa positioner som above(), below(), toLeftOf(), toRightOf() och near(). De hjรคlper till att hitta celler som รคr positionerade runt en kรคnd ankarcell, vilket รคr anvรคndbart nรคr XPath-index รคndras i dynamiska tabeller.

Loopa igenom rader med findElements och lรคs sedan varje cell med getText(). Bygg XPath dynamiskt med strรคngsammanfogning som //tr[โ€œ+i+โ€]/td[โ€œ+j+โ€]. Vรคnta tills tabellen laddas med WebDriverWait innan vรคrden lรคses.

Ja. AI-drivna verktyg som Testim, Mabl och Functionize anvรคnder datorseende och DOM-modeller fรถr att upptรคcka tabellgrรคnser, hรคrleda rubriker och sjรคlvlรคka positioner nรคr kolumner fรถrskjuts. Detta minskar XPath-underhรฅll fรถr dynamiska instrumentpaneler.

AI-modeller lรคr sig radmรถnster frรฅn tidigare kรถrningar och matchar celler med hjรคlp av textlikhet snarare รคn fasta index. Nรคr en rad flyttas eller en kolumn รคndras ordning hittar AI-lokalisatorn fortfarande mรฅlet utan att skriva om XPath.

findElement returnerar ett enda WebElement och utlรถser NoSuchElementException om det saknas. findElements returnerar en lista och returnerar en tom lista om ingen matchning hittas. Anvรคnd findElements nรคr du letar efterping รถver tabellrader eller kolumner.

Sammanfatta detta inlรคgg med: