Kako rukovati web tablicom u Selenium webdriver
U čemu je web tablica Selenium?
A Web tablica in Selenium je WebElement koji se koristi za tablični prikaz podataka ili informacija. Prikazani podaci ili informacije mogu biti statični ili dinamički. Web tablici i njezinim elementima može se pristupiti korištenjem WebElement funkcija i lokatora Selenium. Tipičan primjer web tablice bile bi specifikacije proizvoda prikazane na platformi e-trgovine.
Čitanje HTML web tablice
Postoje trenuci kada trebamo pristupiti elementima (obično tekstovima) koji se nalaze unutar HTML tablica. Međutim, vrlo je rijetko za web dizajnera dati ID ili atribut imena za određenu ćeliju u tablici. Stoga ne možemo koristiti uobičajene metode kao što su “By.id()”, “By.name()” ili “By.cssSelector()”. U ovom slučaju, najpouzdanija opcija je pristupiti im metodom “By.xpath()”.
Kako rukovati web tablicom u Selenium
Razmotrite HTML kod u nastavku za rukovanje web tablicama Selenium.
Koristit ćemo XPath da biste dobili unutarnji tekst ćelije koja sadrži tekst "četvrta ćelija".
Korak 1 – Postavite nadređeni element (tablica)
XPath lokatori u WebDriveru uvijek počinju dvostrukom kosom crtom “//”, a zatim slijedi nadređeni element. Budući da se bavimo web tablicama u Selenium, nadređeni element bi uvijek trebao biti označiti. Prva porcija našeg Selenium XPath lokator tablice bi stoga trebao započeti s “//table”.
Korak 2 – Dodajte podređene elemente
Element odmah ispod je pa možemo to reći je "dijete" od . I također, je "roditelj" od . Svi podređeni elementi u XPathu smješteni su desno od nadređenog elementa, odvojeni jednom kosom crtom “/” kao što je kod prikazan u nastavku.
Korak 3 – Dodajte predikate
The element sadrži dva oznake. Sada možemo reći da ova dva oznake su "djeca" od . Shodno tome, možemo reći da je roditelj oba elementi.
Još jedna stvar koju možemo zaključiti je da dvije elementi su braća i sestre. Braća i sestre se odnose na podređene elemente koji imaju istog roditelja.
Da biste došli do kojoj želimo pristupiti (onoj s tekstom "četvrta ćelija"), prvo moramo pristupiti drugi a ne prvi. Ako jednostavno napišemo “//table/tbody/tr”, tada ćemo pristupiti prvom označiti.
Dakle, kako ćemo pristupiti drugom zatim? Odgovor na ovo je koristiti Predikati.
Predikati su brojevi ili HTML atributi zatvoreni u paru uglatih zagrada "[ ]" koji razlikuju podređeni element od njegove braće i sestara. Budući da je kojem trebamo pristupiti je drugi, koristit ćemo "[2]" kao predikat.
Ako nećemo koristiti nijedan predikat, XPath će pristupiti prvom bratu. Stoga možemo pristupiti prvom koristeći bilo koji od ovih XPath kodova.
Korak 4 – Dodajte sljedeće podređene elemente pomoću odgovarajućih predikata
Sljedeći element kojem trebamo pristupiti je drugi . Primjenjujući načela koja smo naučili iz koraka 2 i 3, finalizirat ćemo naš XPath kod da bude poput onog prikazanog u nastavku.
Sada kada imamo ispravan XPath lokator, već možemo pristupiti ćeliji koju smo željeli i dobiti njezin unutarnji tekst pomoću donjeg koda. Pretpostavlja se da ste spremili gornji HTML kod kao “newhtml.html” unutar vašeg C pogona.
public static void main(String[] args) { String baseUrl = "http://demo.guru99.com/test/write-xpath-table.html"; WebDriver driver = new FirefoxDriver(); driver.get(baseUrl); String innerText = driver.findElement( By.xpath("//table/tbody/tr[2]/td[2]")).getText(); System.out.println(innerText); driver.quit(); } }
Pristup ugniježđenim tablicama
Ista načela o kojima se govori gore primjenjuju se na ugniježđene tablice. Ugniježđene tablice su tablice smještene unutar druge tablice. Primjer je prikazan u nastavku.
Da bismo pristupili ćeliji s tekstom “4-5-6” koristeći koncepte “//roditelj/dijete” i predikat iz prethodnog odjeljka, trebali bismo moći smisliti XPath kod u nastavku.
WebDriver kod u nastavku trebao bi moći dohvatiti unutarnji tekst ćelije kojoj pristupamo.
public static void main(String[] args) { String baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html"; WebDriver driver = new 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(); }
Ispis u nastavku potvrđuje da je uspješno pristupljeno unutarnjoj tablici.
Korištenje atributa kao predikata
Ako je element napisan duboko unutar HTML koda tako da je vrlo teško odrediti broj koji se koristi za predikat, umjesto toga možemo koristiti jedinstveni atribut tog elementa.
U donjem primjeru, ćelija "New York to Chicago" nalazi se duboko u Mercury HTML kod početne stranice Tours.
U ovom slučaju, možemo koristiti jedinstveni atribut tablice (width=”270″) kao predikat. Atributi se koriste kao predikati tako što im se ispred stavlja simbol @. U gornjem primjeru ćelija "New York to Chicago" nalazi se u prvoj četvrtog , pa bi naš XPath trebao biti kao što je prikazano u nastavku.
Upamtite to kada stavljamo XPath kod Java, trebali bismo upotrijebiti znak za izlaz unatrag kosu crtu “\” za dvostruke navodnike s obje strane “270” tako da argument niza By.xpath() neće biti prerano prekinut.
Sada smo spremni pristupiti toj ćeliji pomoću donjeg koda.
public static void main(String[] args) { String baseUrl = "http://demo.guru99.com/test/newtours/"; WebDriver driver = new FirefoxDriver(); driver.get(baseUrl); String innerText = driver.findElement(By .xpath("//table[@width=\"270\"]/tbody/tr[4]/td")) .getText(); System.out.println(innerText); driver.quit(); }
Prečac: Koristite Inspect Element za pristup tablicama Selenium
Ako je broj ili atribut elementa izuzetno teško ili nemoguće dobiti, najbrži način za generiranje XPath koda je korištenje Inspect Element.
Razmotrite primjer u nastavku iz Mercury Početna stranica Tours.
Korak 1
Koristite Firebug za dobivanje XPath koda.
Korak 2
Potražite prvi roditeljski element "table" i izbrišite sve lijevo od njega.
Korak 3
Preostalom dijelu koda dodajte dvostruku kosu crtu “//” i kopirajte ga u svoj WebDriver kod.
WebDriver kod u nastavku moći će uspješno dohvatiti unutarnji tekst elementa kojem pristupamo.
public static void main(String[] args) { String baseUrl = "http://demo.guru99.com/test/newtours/"; WebDriver driver = new 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(); }
rezime
- By.xpath() se obično koristi za pristup elementima WebTable u Selenium.
- Ako je element napisan duboko unutar HTML koda tako da je vrlo teško odrediti broj koji se koristi za predikat, umjesto toga možemo koristiti jedinstveni atribut tog elementa za Selenium dobiti element tablice.
- Atributi se koriste kao predikati tako što im se ispred stavlja simbol @.
- Koristite Inspect Element za pristup web tablici Selenium