Cum să gestionați tabelul web în Selenium WebDriver

Cuprins:

Anonim

Citirea unui tabel web HTML

Există momente când trebuie să accesăm elemente (de obicei texte) care se află în tabele HTML. Cu toate acestea, este foarte rar ca un designer web să furnizeze un atribut id sau nume unei anumite celule din tabel. Prin urmare, nu putem folosi metodele obișnuite precum „By.id ()”, „By.name ()” sau „By.cssSelector ()”. În acest caz, cea mai fiabilă opțiune este să le accesați folosind metoda „By.xpath ()”.

În acest tutorial, veți învăța-

  • Cum se scrie XPath pentru tabel
  • Accesarea tabelelor imbricate
  • Utilizarea atributelor ca predicatori
  • Comandă rapidă: utilizați elementul Inspectare pentru accesarea tabelelor din seleniu

Cum se scrie XPath pentru tabel

Luați în considerare codul HTML de mai jos.

Vom folosi XPath pentru a obține textul interior al celulei care conține textul „a patra celulă”.

Pasul 1 - Setați elementul părinte (tabel)

Localizatorii XPath din WebDriver încep întotdeauna cu o linie dublă „//” și apoi sunt urmate de elementul părinte . Deoarece avem de-a face cu tabele, elementul părinte ar trebui să fie întotdeauna eticheta

. Prin urmare, prima porțiune a localizatorului nostru XPath ar trebui să înceapă cu „// tabel”.

Pasul 2 - Adăugați elementele copil

Elementul aflat imediat sub

este , deci putem spune că este „copilul”
. Și, de asemenea,
este „părintele” lui . Toate elementele secundare din XPath sunt plasate în partea dreaptă a elementului lor părinte, separate cu o singură bară „/”, precum codul prezentat mai jos.

Pasul 3 - Adăugați predicați

Elementul

conține două etichete . Putem spune acum că aceste două etichete sunt „copii” ai lui . În consecință, putem spune că este părintele ambelor elemente .

Un alt lucru pe care îl putem concluziona este că cele două elemente

sunt frați. Frații se referă la elementele copilului care au același părinte .

Pentru a ajunge la

și nu prima. Dacă scriem pur și simplu „// tabel / tbody / tr”, atunci vom accesa prima etichetă .

Deci, cum accesăm al doilea

atunci? Răspunsul la acest lucru este să folosiți predicații .

Predicatele sunt numere sau atribute HTML închise într-o pereche de paranteze pătrate „[]” care disting un element copil de frații săi . Deoarece

pe care trebuie să îl accesăm este al doilea, vom folosi „[2]” ca predicat.

Dacă nu vom folosi niciun predicat, XPath va accesa primul frate. Prin urmare, putem accesa primul

folosind oricare dintre aceste coduri XPath.

Pasul 4 - Adăugați elementele copilului care reușesc folosind predicatorii corespunzători

Următorul element pe care trebuie să îl accesăm este al doilea

, astfel XPath-ul nostru ar trebui să fie așa cum se arată mai jos.

Amintiți-vă că, atunci când punem codul XPath în Java, ar trebui să folosim caracterul de evacuare înapoi „\" pentru ghilimele duble de pe ambele părți ale „270”, astfel încât argumentul șir al By.xpath () să nu fie terminat prematur. .

Acum suntem gata să accesăm acea celulă folosind codul de mai jos.

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

Comandă rapidă: utilizați elementul Inspectare pentru accesarea tabelelor din seleniu

Dacă numărul sau atributul unui element este extrem de dificil sau imposibil de obținut, cea mai rapidă modalitate de a genera codul XPath este folosirea Inspect Element.

Luați în considerare exemplul de mai jos de pe pagina principală Mercury Tours.

Pasul 1

Utilizați Firebug pentru a obține codul XPath.

Pasul 2

Căutați primul element părinte „tabel” și ștergeți totul din stânga acestuia.

Pasul 3

Prefixați partea rămasă a codului cu o bară dublă „//” și copiați-o în codul dvs. WebDriver.

Codul WebDriver de mai jos va putea prelua cu succes textul interior al elementului pe care îl accesăm.

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

rezumat

  • By.xpath () este utilizat în mod obișnuit pentru a accesa elementele tabelului.
  • Dacă elementul este scris profund în codul HTML astfel încât numărul de utilizat pentru predicat este foarte dificil de determinat, putem folosi în schimb atributul unic al acelui element.
  • Atributele sunt folosite ca predicate prin prefixarea acestora cu simbolul @.
  • Utilizați Elementul de inspecție pentru accesarea meselor în seleniu
pe care dorim să îl accesăm (cea cu textul „a patra celulă”), trebuie mai întâi să accesăm a doua
. Aplicând principiile pe care le-am învățat din pașii 2 și 3, vom finaliza codul nostru XPath pentru a fi ca cel prezentat mai jos.

Acum că avem localizatorul XPath corect, putem accesa deja celula dorită și putem obține textul interior folosind codul de mai jos. Se presupune că ați salvat codul HTML de mai sus ca „newhtml.html” în C Drive.

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

Accesarea tabelelor imbricate

Aceleași principii discutate mai sus se aplică tabelelor imbricate. Tabelele imbricate sunt tabele situate într-un alt tabel . Un exemplu este prezentat mai jos.

Pentru a accesa celula cu textul „4-5-6” utilizând conceptele „// părinte / copil” și predicate din secțiunea anterioară, ar trebui să putem veni cu codul XPath de mai jos.

Codul WebDriver de mai jos ar trebui să poată recupera textul interior al celulei la care accesăm.

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

Ieșirea de mai jos confirmă faptul că tabelul interior a fost accesat cu succes.

Utilizarea atributelor ca predicatori

Dacă elementul este scris profund în codul HTML astfel încât numărul de utilizat pentru predicat este foarte dificil de determinat, putem folosi în schimb atributul unic al acelui element.

În exemplul de mai jos, celula „New York-Chicago” este amplasată adânc în codul HTML al paginii de pornire Mercury Tours.

În acest caz, putem folosi atributul unic al tabelului (lățimea = "270") ca predicat. Atributele sunt folosite ca predicate prin prefixarea acestora cu simbolul @ . În exemplul de mai sus, celula „New York-Chicago” este situată în primul

al patrulea