Omgaan met webtabel in Selenium WebDriver

Inhoudsopgave:

Anonim

Een HTML-webtabel lezen

Er zijn momenten dat we toegang moeten hebben tot elementen (meestal teksten) die zich in HTML-tabellen bevinden. Het komt echter zelden voor dat een webdesigner een id- of naamattribuut opgeeft voor een bepaalde cel in de tabel. Daarom kunnen we de gebruikelijke methoden zoals "By.id ()", "By.name ()" of "By.cssSelector ()" niet gebruiken. In dit geval is de meest betrouwbare optie om ze te openen met de "By.xpath ()" - methode.

In deze tutorial leer je:

  • Hoe XPath voor Table te schrijven
  • Toegang tot geneste tabellen
  • Attributen gebruiken als predikaten
  • Snelkoppeling: gebruik Inspect Element voor toegang tot tabellen in Selenium

Hoe XPath voor Table te schrijven

Beschouw de onderstaande HTML-code.

We zullen XPath gebruiken om de binnentekst van de cel met de tekst "vierde cel" op te halen.

Stap 1 - Stel het bovenliggende element (tabel) in

XPath-locators in WebDriver beginnen altijd met een dubbele schuine streep "//" en worden dan gevolgd door het bovenliggende element . Aangezien we te maken hebben met tabellen, moet het bovenliggende element altijd de tag

zijn. Het eerste deel van onze XPath-locator zou daarom moeten beginnen met "// table".

Stap 2 - Voeg de onderliggende elementen toe

Het element direct onder

is , dus we kunnen zeggen dat het "kind" is van
. En ook,
is de "ouder" van . Alle onderliggende elementen in XPath worden rechts van hun bovenliggende element geplaatst, gescheiden door een schuine streep "/" zoals de onderstaande code.

Stap 3 - Voeg predikaten toe

Het

-element bevat twee -tags. We kunnen nu zeggen dat deze twee -tags "kinderen" zijn van . Daarom kunnen we zeggen dat de ouder is van beide -elementen.

Een ander ding dat we kunnen concluderen is dat de twee

-elementen broers en zussen zijn. Broers en zussen verwijzen naar onderliggende elementen met dezelfde ouder .

Om bij de

openen en niet de eerste. Als we gewoon "// table / tbody / tr" schrijven, krijgen we toegang tot de eerste -tag.

Dus, hoe krijgen we dan toegang tot de tweede

? Het antwoord hierop is om predikaten te gebruiken .

Predikaten zijn getallen of HTML-attributen tussen een paar vierkante haken "[]" die een onderliggend element onderscheiden van zijn broers en zussen . Aangezien de

waartoe we toegang moeten hebben de tweede is, zullen we "[2]" als predikaat gebruiken.

Als we geen predikaat gebruiken, krijgt XPath toegang tot de eerste broer of zus. Daarom hebben we toegang tot de eerste

met behulp van een van deze XPath-codes.

Stap 4 - Voeg de volgende onderliggende elementen toe met behulp van de juiste predicaten

Het volgende element dat we nodig hebben om toegang te krijgen is het tweede

, en dus zou ons XPath er als volgt uit moeten zien.

Onthoud dat wanneer we de XPath-code in Java plaatsen, we het escape-teken achterwaartse slash "\" moeten gebruiken voor de dubbele aanhalingstekens aan beide zijden van "270", zodat het stringargument van By.xpath () niet voortijdig wordt beëindigd .

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

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";WebDriver-stuurprogramma = nieuwe FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (By.xpath ("// table [@width = \" 270 \ "] / tbody / tr [4] / td")).getText ();System.out.println (innerText);driver.quit ();​

Snelkoppeling: gebruik Inspect Element voor toegang tot tabellen in Selenium

Als het nummer of attribuut van een element buitengewoon moeilijk of onmogelijk te verkrijgen is, is de snelste manier om de XPath-code te genereren met Inspect Element.

Bekijk het onderstaande voorbeeld van de startpagina van Mercury Tours.

Stap 1

Gebruik Firebug om de XPath-code te verkrijgen.

Stap 2

Zoek het eerste bovenliggende element "table" en verwijder alles links ervan.

Stap 3

Voeg voor het resterende gedeelte van de code een dubbele schuine streep "//" toe en kopieer het naar uw WebDriver-code.

De onderstaande WebDriver-code kan de innerlijke tekst van het element waartoe we toegang hebben, met succes ophalen.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";WebDriver-stuurprogramma = nieuwe 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 ();​

Overzicht

  • By.xpath () wordt vaak gebruikt om toegang te krijgen tot tabelelementen.
  • Als het element diep in de HTML-code is geschreven, zodat het nummer dat voor het predikaat moet worden gebruikt, erg moeilijk te bepalen is, kunnen we in plaats daarvan het unieke attribuut van dat element gebruiken.
  • Attributen worden als predikaten gebruikt door ze vooraf te laten gaan met het @ -symbool.
  • Gebruik Inspect Element voor toegang tot tabellen in Selenium
te komen die we willen openen (degene met de tekst "vierde cel"), moeten we eerst de tweede
. Door de principes toe te passen die we hebben geleerd uit stap 2 en 3, zullen we onze XPath-code afronden zoals hieronder wordt weergegeven.

Nu we de juiste XPath-locator hebben, hebben we al toegang tot de cel die we wilden en kunnen we de binnentekst ophalen met behulp van de onderstaande code. Er wordt vanuit gegaan dat u de bovenstaande HTML-code als "newhtml.html" in uw C-schijf hebt opgeslagen.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/write-xpath-table.html";WebDriver-stuurprogramma = nieuwe FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (By.xpath ("// table / tbody / tr [2] / td [2]")). GetText ();System.out.println (innerText);driver.quit ();​​

Toegang tot geneste tabellen

Dezelfde principes die hierboven zijn besproken, zijn van toepassing op geneste tabellen. Geneste tabellen zijn tabellen die zich in een andere tabel bevinden . Hieronder ziet u een voorbeeld.

Om toegang te krijgen tot de cel met de tekst "4-5-6" met behulp van de "// parent / child" en predikaatconcepten uit de vorige sectie, zouden we in staat moeten zijn om de XPath-code hieronder te bedenken.

De onderstaande WebDriver-code zou in staat moeten zijn om de innerlijke tekst van de cel waartoe we toegang hebben, op te halen.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html";WebDriver-stuurprogramma = nieuwe 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.

Attributen gebruiken als predikaten

Als het element diep in de HTML-code is geschreven, zodat het nummer dat voor het predikaat moet worden gebruikt, erg moeilijk te bepalen is, 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 HTML-code van de startpagina van Mercury Tours.

In dit geval kunnen we het unieke kenmerk van de tabel (breedte = "270") als predikaat gebruiken. Attributen worden als predikaten gebruikt door ze vooraf te laten gaan met het @ -symbool . In het bovenstaande voorbeeld bevindt de cel "New York to Chicago" zich in de eerste

van de vierde