Kuidas käsitseda veebitabelit seleeni WebDriveris

Lang L: none (table-of-contents):

Anonim

HTML-veebitabeli lugemine

Mõnikord peame juurde pääsema HTML-tabelites olevatele elementidele (tavaliselt tekstidele). Kuid veebidisainer esitab tabeli teatud lahtrile ID või nime atribuudi väga harva. Seetõttu ei saa me kasutada tavapäraseid meetodeid, näiteks "By.id ()", "By.name ()" või "By.cssSelector ()". Sel juhul on kõige usaldusväärsem võimalus neile juurde pääseda, kasutades meetodit "By.xpath ()".

Selles õpetuses saate teada

  • Kuidas kirjutada XPath tabeli jaoks
  • Juurdepääs pesastatud tabelitele
  • Atribuutide kasutamine predikaatidena
  • Otsetee: kasutage seleenis olevatele tabelitele juurdepääsemiseks elementi Kontrolli

Kuidas kirjutada XPath tabeli jaoks

Mõelge allpool olevale HTML-koodile.

Rakenduse "neljas lahter" sisaldava lahtri sisemise teksti saamiseks kasutame XPathi.

1. samm - määrake vanemelement (tabel)

Webathriveri XPathi lokaatorid algavad alati kahekordse kaldkriipsuga "//" ja seejärel järgnevad vanemelement . Kuna tegemist on tabelitega, peaks vanemelement olema alati silt

. Seetõttu peaks meie XPathi lokaatori esimene osa algama tähega "// table".

2. samm - lisage lapse elemendid

Otse all olev element on

, nii et võime öelda, et on
-i "laps". Ja ka on "vanem". Kõik XPathi alamelemendid paigutatakse nende vanemelemendist paremale, eraldatuna ühe kaldkriipsuga "/" nagu allpool näidatud kood.

3. samm - lisage predikaadid

Element

sisaldab kahte silti . Nüüd võime öelda, et need kaks silti on "lapsed". Järelikult võime öelda, et on mõlema elemendi vanem.

Teine asi, mille võime järeldada, on see, et kaks

elementi on õed-vennad. Õed-vennad viitavad lapse elementidele, kellel on sama vanem .

, mitte esimesele. Kui kirjutame lihtsalt "// table / tbody / tr", siis pääseme juurde esimesele märgendile.

Niisiis, kuidas me pääseme juurde teisele

? Vastus sellele on kasutada predikaate .

Predikaadid on arv nurki või HTML-atribuute, mis on ühendatud nurksulgude paariga "[]", mis eristavad lapse elementi õdedest-vendadest . Kuna

, millele peame juurde pääsema, on teine, kasutame predikaadina "[2]".

Kui me ei kasuta ühtegi predikaati, pääseb XPath esimesele vennale. Seetõttu pääseme esimesele

-le juurde, kasutades ühte neist XPath-koodidest.

4. samm - lisage edukad lapseelemendid, kasutades sobivaid predikaate

Järgmine element, millele peame juurde pääsema, on teine ​​

esimeses
juurde pääsemiseks, millele soovime juurde pääseda (see, millel on tekst "neljas lahter"), peame esmalt juurde pääsema teisele
. Rakendades 2. ja 3. sammust õpitud põhimõtteid, viime meie XPath-koodi lõplikult sarnaseks allpool näidatule.

Nüüd, kui meil on õige XPathi lokaator, pääseme juba soovitud lahtrile juurde ja saate selle sisemise teksti alloleva koodi abil. Eeldatakse, et olete ülaltoodud HTML-koodi oma C-draivi salvestanud kui "newhtml.html".

public staatiline void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/write-xpath-table.html";WebDriveri draiver = uus FirefoxDriver ();draiver.get (baseUrl);String internalText = draiver.findElement (By.xpath ("// tabel / tbody / tr [2] / td [2]")). GetText ();System.out.println (internalText);juht.ulge ();}}

Juurdepääs pesastatud tabelitele

Samad põhimõtted, mida eespool arutati, kehtivad pesastatud tabelite kohta. Pesastatud tabelid on teise tabeli sees olevad tabelid . Näide on toodud allpool.

Lahtrile juurdepääsuks tekstiga "4-5-6", kasutades eelmise jaotise mõisteid "// parent / child" ja predikaatide mõisteid, peaksime suutma välja mõelda allpool oleva XPath-koodi.

Allpool olev WebDriveri kood peaks suutma hankida selle lahtri sisemise teksti, millele me juurde pääseme.

public staatiline void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html";WebDriveri draiver = uus FirefoxDriver ();draiver.get (baseUrl);String internalText = draiver.findElement (By.xpath ("// tabel / tbody / tr [2] / td [2] / table / tbody / tr / td [2]")). GetText ();System.out.println (internalText);juht.ulge ();}

Allpool olev väljund kinnitab, et sisemisele tabelile pääses edukalt juurde.

Atribuutide kasutamine predikaatidena

Kui element on HTML-koodi sisse kirjutatud nii, et predikaadi jaoks kasutatavat arvu on väga raske kindlaks teha, võime selle asemel kasutada selle elemendi unikaalset atribuuti.

Allpool toodud näites asub lahter "New York - Chicago" sügaval Mercury Toursi kodulehe HTML-koodis.

Sellisel juhul võime predikaadina kasutada tabeli ainulaadset atribuuti (width = "270"). Atribuute kasutatakse predikaatidena, lisades neile sümboli @ . Ülaltoodud näites asub lahter "New York - Chicago" neljanda

ja seega peaks meie XPath olema selline, nagu allpool näidatud.

Pidage meeles, et kui paneme XPath-koodi Java-sse, peaksime põgenemismärgi tahapoole kaldkriipsu "\" kasutama kahekordsete jutumärkide jaoks "270" mõlemal küljel, nii et By.xpath () stringi argumenti ei lõpetata enneaegselt .

Oleme nüüd allpool oleva koodi abil valmis sellele lahtrile juurde pääsema.

public staatiline void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";WebDriveri draiver = uus FirefoxDriver ();draiver.get (baseUrl);String internalText = draiver.findElement (Autor.xpath ("// tabel [@width = \" 270 \ "] / tbody / tr [4] / td")).getText ();System.out.println (internalText);juht.ulge ();}

Otsetee: kasutage seleenis olevatele tabelitele juurdepääsemiseks elementi Kontrolli

Kui elemendi numbrit või atribuuti on ülimalt keeruline või võimatu hankida, on XPath-koodi genereerimiseks kõige kiirem element Elect.

Mõelge allpool toodud näidisele Mercury Toursi kodulehelt.

Samm 1

XPath-koodi hankimiseks kasutage Firebugi.

2. samm

Otsige üles esimene "tabeli" vanemelement ja kustutage kõik sellest vasakul.

3. samm

Koodi ülejäänud osa lisage kahekordse kaldkriipsuga "//" ja kopeerige see oma WebDriveri koodi.

Allpool olev WebDriveri kood saab edukalt hankida selle elemendi sisemise teksti, millele me juurde pääseme.

public staatiline void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";WebDriveri draiver = uus FirefoxDriver ();draiver.get (baseUrl);String internalText = draiver.findElement (Autor.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 (internalText);juht.ulge ();}

Kokkuvõte

  • By.xpath () kasutatakse tavaliselt tabeli elementidele juurdepääsemiseks.
  • Kui element on HTML-koodi sisse kirjutatud nii, et predikaadi jaoks kasutatavat arvu on väga raske kindlaks teha, võime selle asemel kasutada selle elemendi unikaalset atribuuti.
  • Atribuute kasutatakse predikaatidena, lisades neile sümboli @.
  • Kasutage seleenis olevatele tabelitele juurdepääsemiseks elementi Kontrolli