Sådan håndteres webtabellen i Selen WebDriver

Indholdsfortegnelse:

Anonim

Læsning af en HTML-webtabel

Der er tidspunkter, hvor vi har brug for at få adgang til elementer (normalt tekster), der er inden for HTML-tabeller. Det er dog meget sjældent for en webdesigner at angive en id- eller navneattribut til en bestemt celle i tabellen. Derfor kan vi ikke bruge de sædvanlige metoder såsom "By.id ()", "By.name ()" eller "By.cssSelector ()". I dette tilfælde er den mest pålidelige mulighed at få adgang til dem ved hjælp af metoden "By.xpath ()".

I denne vejledning lærer du-

  • Hvordan man skriver XPath til tabel
  • Adgang til indlejrede tabeller
  • Brug af attributter som forudsigelser
  • Genvej: Brug inspektionselementet til adgang til borde i selen

Hvordan man skriver XPath til tabel

Overvej HTML-koden nedenfor.

Vi bruger XPath til at få den indre tekst i cellen, der indeholder teksten "fjerde celle".

Trin 1 - Indstil overordnet element (tabel)

XPath-placatorer i WebDriver starter altid med et dobbelt skråstreg fremad "//" og derefter efterfulgt af det overordnede element . Da vi har at gøre med tabeller, skal det overordnede element altid være -tagget. Den første del af vores XPath-locator skal derfor starte med "// table".

Trin 2 - Tilføj underordnede elementer

Elementet umiddelbart under er , så vi kan sige, at er "barnet" til

. Og også er "forælder" til . Alle underordnede elementer i XPath er placeret til højre for deres overordnede element, adskilt med et skråstreg fremad "/" som koden vist nedenfor.

Trin 3 - Tilføj forudsigelser

Elementet

indeholder to tags. Vi kan nu sige, at disse to tags er "børn" til . Derfor kan vi sige, at er forælder til begge -elementerne.

En anden ting, vi kan konkludere, er, at de to

elementer er søskende. Søskende henviser til barnelementer, der har den samme forælder .

For at komme til det

og ikke den første. Hvis vi blot skriver "// table / tbody / tr", får vi adgang til det første -tag.

Så hvordan får vi adgang til den anden

derefter? Svaret på dette er at bruge Predicates .

Predikater er tal eller HTML-attributter omgivet af et par firkantede parenteser [[] ", der adskiller et underordnet element fra dets søskende . Da

vi har brug for adgang er den anden, skal vi bruge "[2]" som prædikat.

Hvis vi ikke bruger noget prædikat, får XPath adgang til det første søskende. Derfor kan vi få adgang til den første

ved hjælp af en af ​​disse XPath-koder.

Trin 4 - Tilføj de efterfølgende børneelementer ved hjælp af de relevante forudsigelser

Det næste element, vi har brug for at få adgang til, er det andet

, og vores XPath skal derfor være som vist nedenfor.

Husk, at når vi lægger XPath-koden i Java, skal vi bruge flugttegnet bagud skråstreg "\" til de dobbelte anførselstegn på begge sider af "270", så strengargumentet for By.xpath () ikke afsluttes for tidligt .

Vi er nu klar til at få adgang til den celle ved hjælp af nedenstående kode.

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

Genvej: Brug inspektionselementet til adgang til borde i selen

Hvis antallet eller attributten for et element er ekstremt vanskeligt eller umuligt at få, er den hurtigste måde at generere XPath-koden ved hjælp af Inspect Element.

Overvej eksemplet nedenfor fra Mercury Tours hjemmeside.

Trin 1

Brug Firebug til at hente XPath-koden.

Trin 2

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

Trin 3

Præfiks den resterende del af koden med dobbelt skråstreg "//" og kopier den over til din WebDriver-kode.

WebDriver-koden nedenfor kan med succes hente den indre tekst af det element, vi har adgang til.

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

Resumé

  • By.xpath () bruges ofte til at få adgang til tabelelementer.
  • Hvis elementet er skrevet dybt inde i HTML-koden, således at det nummer, der skal bruges til prædikatet, er meget vanskeligt at bestemme, kan vi i stedet bruge elementets unikke attribut.
  • Attributter bruges som prædikater ved at sætte dem foran symbolet @.
  • Brug inspektionselementet til adgang til borde i selen
, vi ønsker at få adgang til (det med teksten "fjerde celle"), skal vi først få adgang til den anden
. Ved at anvende de principper, vi har lært fra trin 2 og 3, vil vi færdiggøre vores XPath-kode, som den er vist nedenfor.

Nu hvor vi har den rigtige XPath locator, kan vi allerede få adgang til den celle, som vi ønskede, og få dens indre tekst ved hjælp af nedenstående kode. Det antages, at du har gemt HTML-koden ovenfor som "newhtml.html" i dit C-drev.

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

Adgang til indlejrede tabeller

De samme principper, der er diskuteret ovenfor, gælder for indlejrede tabeller. Indlejrede tabeller er tabeller placeret i en anden tabel . Et eksempel er vist nedenfor.

For at få adgang til cellen med teksten "4-5-6" ved hjælp af "// forælder / barn" og prædikatbegreber fra det foregående afsnit, skal vi være i stand til at komme med XPath-koden nedenfor.

WebDriver-koden nedenfor skal kunne hente den indre tekst i den celle, som vi har adgang til.

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

Outputtet nedenfor bekræfter, at der er adgang til den indre tabel.

Brug af attributter som forudsigelser

Hvis elementet er skrevet dybt inde i HTML-koden, således at det nummer, der skal bruges til prædikatet, er meget vanskeligt at bestemme, kan vi i stedet bruge elementets unikke attribut.

I eksemplet nedenfor er "New York til Chicago" cellen placeret dybt inde i Mercury Tours startside HTML-kode.

I dette tilfælde kan vi bruge tabellens unikke attribut (bredde = "270") som prædikat. Attributter bruges som prædikater ved at sætte dem foran symbolet @ . I eksemplet ovenfor er "New York til Chicago" cellen placeret i den første

af den fjerde