Hur man hanterar webbtabellen i Selen WebDriver

Innehållsförteckning:

Anonim

Läser en HTML-webbtabell

Det finns tillfällen när vi behöver komma åt element (vanligtvis texter) som finns i HTML-tabeller. Det är dock mycket sällan för en webbdesigner att tillhandahålla ett ID eller namnattribut till en viss cell i tabellen. Därför kan vi inte använda de vanliga metoderna som "By.id ()", "By.name ()" eller "By.cssSelector ()". I det här fallet är det mest pålitliga alternativet att komma åt dem med metoden "By.xpath ()".

I den här handledningen lär du dig

  • Hur man skriver XPath för tabell
  • Åtkomst till kapslade tabeller
  • Använda attribut som predikat
  • Genväg: Använd inspekteringselementet för åtkomst till tabeller i selen

Hur man skriver XPath för tabell

Tänk på HTML-koden nedan.

Vi använder XPath för att få den inre texten i cellen som innehåller texten "fjärde cellen."

Steg 1 - Ställ in överordnat element (tabell)

XPath-sökare i WebDriver börjar alltid med ett dubbelt snedstreck "//" och följs sedan av det överordnade elementet . Eftersom vi har att göra med tabeller bör det överordnade elementet alltid vara taggen . Den första delen av vår XPath-lokaliserare bör därför börja med "// tabell".

Steg 2 - Lägg till underordnade element

Elementet omedelbart under är så vi kan säga att är "barnet" till . Och

är "föräldern" till . Alla underordnade element i XPath placeras till höger om sitt överordnade element, separerade med ett snedstreck "/" som koden som visas nedan.

Steg 3 - Lägg till predikat

Elementet

innehåller två -taggar. Vi kan nu säga att dessa två taggar är "barn" till . Följaktligen kan vi säga att är föräldern till båda -elementen.

En annan sak som vi kan dra slutsatsen är att de två

elementen är syskon. Syskon hänvisar till barnelement som har samma förälder .

För att komma till

och inte den första. Om vi ​​bara skriver "// table / tbody / tr", kommer vi att komma åt den första -taggen.

Så, hur får vi åtkomst till den andra

då? Svaret på detta är att använda Predicates .

Predikat är siffror eller HTML-attribut som är inneslutna i ett par hakparenteser []] som skiljer ett barnelement från sina syskon . Eftersom

vi behöver åtkomst är den andra, ska vi använda "[2]" som predikat.

Om vi ​​inte använder något predikat kommer XPath åt det första syskonet. Därför kan vi komma åt den första

med någon av dessa XPath-koder.

Steg 4 - Lägg till de efterföljande barnelementen med lämpliga predikat

Nästa element vi behöver komma åt är det andra

, och därför bör vår XPath vara som visas nedan.

Kom ihåg att när vi placerar XPath-koden i Java, ska vi använda escape-tecknet bakåt snedstreck "\" för dubbla citattecken på båda sidor om "270" så att strängargumentet för By.xpath () inte avslutas i förtid .

Vi är nu redo att komma åt den cellen med koden nedan.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";WebDriver-drivrutin = ny FirefoxDriver ();driver.get (baseUrl);Sträng innerText = driver.findElement (av.xpath ("// tabell [@width = \" 270 \ "] / tbody / tr [4] / td")).getText ();System.out.println (innerText);driver.quit ();}

Genväg: Använd inspekteringselementet för åtkomst till tabeller i selen

Om numret eller attributet för ett element är extremt svårt eller omöjligt att få, är det snabbaste sättet att generera XPath-koden att använda Inspect Element.

Tänk på exemplet nedan från Mercury Tours hemsida.

Steg 1

Använd Firebug för att få XPath-koden.

Steg 2

Leta efter det första "tabell" överordnade elementet och ta bort allt till vänster om det.

Steg 3

Prefixa den återstående delen av koden med dubbel snedstreck "//" och kopiera den till din WebDriver-kod.

WebDriver-koden nedan kommer att kunna hämta den inre texten till det element som vi använder.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";WebDriver-drivrutin = ny FirefoxDriver ();driver.get (baseUrl);Sträng innerText = driver.findElement (av.xpath ("// tabell / tbody / tr / td [2]"+ "// tabell / tbody / tr [4] / td /"+ "tabell / tbody / tr / td [2] /"+ "tabell / tbody / tr [2] / td [1] /"+ "tabell [2] / tbody / tr [3] / td [2] / font")).getText ();System.out.println (innerText);driver.quit ();}

Sammanfattning

  • By.xpath () används ofta för att komma åt tabellelement.
  • Om elementet skrivs djupt inuti HTML-koden så att antalet som ska användas för predikatet är mycket svårt att bestämma, kan vi istället använda elementets unika attribut.
  • Attribut används som predikat genom att prefixa dem med @ -symbolen.
  • Använd inspekteringselementet för åtkomst till bord i selen
vi vill komma åt (den med texten "fjärde cellen") måste vi först komma åt den andra
. Genom att tillämpa principerna vi har lärt oss från steg 2 och 3 kommer vi att slutföra vår XPath-kod så att den liknar den som visas nedan.

Nu när vi har rätt XPath-lokaliserare kan vi redan komma åt cellen som vi ville och få sin inre text med hjälp av koden nedan. Det förutsätter att du har sparat HTML-koden ovan som "newhtml.html" på din C-enhet.

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

Åtkomst till kapslade tabeller

Samma principer som diskuterats ovan gäller kapslade tabeller. Kapslade tabeller är tabeller i en annan tabell . Ett exempel visas nedan.

För att komma åt cellen med texten "4-5-6" med "// parent / child" och predikatbegrepp från föregående avsnitt, borde vi kunna komma med XPath-koden nedan.

WebDriver-koden nedan ska kunna hämta den inre texten i cellen som vi har åtkomst till.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html";WebDriver-drivrutin = ny FirefoxDriver ();driver.get (baseUrl);Sträng innerText = driver.findElement (By.xpath ("// tabell / tbody / tr [2] / td [2] / tabell / tbody / tr / td [2]")). GetText ();System.out.println (innerText);driver.quit ();}

Utdata nedan bekräftar att den inre tabellen nås framgångsrikt.

Använda attribut som predikat

Om elementet skrivs djupt inuti HTML-koden så att antalet som ska användas för predikatet är mycket svårt att bestämma, kan vi istället använda elementets unika attribut.

I exemplet nedan finns cellen "New York till Chicago" djupt in i Mercury Tours hemsidas HTML-kod.

I det här fallet kan vi använda tabellens unika attribut (bredd = "270") som predikat. Attribut används som predikat genom att prefixa dem med @ -symbolen . I exemplet ovan finns cellen "New York till Chicago" i den första

av den fjärde