xpath axes dynamic xpath selenium webdriver
Ovaj vodič objašnjava XPath osi za dinamički XPath u programu Selenium WebDriver uz pomoć različitih korištenih osi XPath, primjeri i objašnjenje strukture:
U prethodnom uputstvu naučili smo o XPath funkcijama i njegovoj važnosti u identificiranju elementa. Međutim, kada više od jednog elementa ima previše sličnu orijentaciju i nomenklaturu, postaje nemoguće jedinstveno identificirati element.
=> Ovdje pogledajte Savršen vodič za trening selena.
Što ćete naučiti:
Razumijevanje XPath osi
Shvatimo gore spomenuti scenarij uz pomoć primjera.
Razmislite o scenariju u kojem se koriste dvije poveznice s tekstom 'Uredi'. U takvim slučajevima postaje primjereno razumjeti čvornu strukturu HTML-a.
Kopirajte donji kod u bilježnicu i spremite ga u .htm datoteku.
Edit Edit
Korisničko sučelje izgledat će kao zaslon u nastavku:
Izjava o problemu
P # 1) Što učiniti kada čak ni funkcije XPath ne prepoznaju element?
Odgovor: U takvom slučaju koristimo XPath osi zajedno s XPath funkcijama.
Drugi dio ovog članka govori o tome kako pomoću hijerarhijskog HTML formata možemo identificirati element. Za početak ćemo dobiti malo informacija o XPath osi.
P # 2) Što su XPath osi?
Odgovor: Osi XPath definiraju skup čvorova u odnosu na trenutni (kontekstni) čvor. Koristi se za lociranje čvora koji je u odnosu na čvor na tom stablu.
P # 3) Što je kontekstni čvor?
Odgovor: Čvor konteksta može se definirati kao čvor koji trenutno gleda procesor XPath.
Različite XPath osi korištene u ispitivanju selena
U nastavku je navedeno trinaest različitih osi. Međutim, nećemo ih sve koristiti tijekom testiranja selena.
- predak : Ove osi označavaju sve pretke u odnosu na kontekstni čvor, koji također dosežu do korijenskog čvora.
- predak ili ja: Ovaj ukazuje na čvor konteksta i sve pretke u odnosu na čvor konteksta, a uključuje i korijenski čvor.
- atribut: To ukazuje na atribute čvora konteksta. Može se predstaviti simbolom '@'.
- dijete: To ukazuje na podređene čvorove konteksta.
- prema dolje: To ukazuje na djecu, unuke i njihovu djecu (ako ih ima) čvora konteksta. To NE označava prostor atributa i imena.
- potomak ili ja: To ukazuje na čvor konteksta i djecu, te unuke i njihovu djecu (ako ih ima) čvora konteksta. To NE označava atribut i prostor imena.
- sljedeće: To ukazuje na sve čvorove koji se pojavljuju nakon čvor konteksta u HTML DOM strukturi. To NE ukazuje na potomstvo, atribut i prostor imena.
- srodnici: Ovaj pokazuje sve čvorove braće i sestara (isti roditelj kao i čvor konteksta) koji pojaviti se nakon čvora konteksta u HTML DOM strukturi. To NE ukazuje na potomstvo, atribut i prostor imena.
- prostor imena: To ukazuje na sve čvorove prostora imena kontekstnog čvora.
- roditelj: To ukazuje na roditelja čvora konteksta.
- prethodi: To ukazuje na sve čvorove koji se pojavljuju prije čvor konteksta u HTML DOM strukturi. To NE ukazuje na potomstvo, atribut i prostor imena.
- prethodni brat ili sestra: Ovaj označava sve pojavljujuće se čvorove braće i sestara (isti roditelj kao i čvor konteksta) prije čvor konteksta u HTML DOM strukturi. To NE ukazuje na potomstvo, atribut i prostor imena.
- ja: Ovaj ukazuje na čvor konteksta.
Struktura XPath osi
Razmotrite hijerarhiju u nastavku kako biste razumjeli kako XPath osi rade.
Gore navedeni primjer potražite u nastavku jednostavnog HTML koda. Molimo kopirajte donji kod u uređivač bilježnice i spremite ga u .html datoteku.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Stranica će izgledati dolje. Naša je misija iskoristiti XPath Axes za jedinstveno pronalaženje elemenata. Pokušajmo identificirati elemente koji su označeni na gornjoj tablici. Čvor konteksta je 'Sisavac'
# 1) Predak
Dnevnik: Da bi se identificirao element pretka iz čvora konteksta.
XPath # 1: // div (@ class = ’Sisavac’) / predak :: div
XPath '// div (@ class = 'Sisavac') / predak :: div' baca dva odgovarajuća čvora:
- Kičmenjaci, budući da je roditelj 'Sisavaca', pa se stoga i on smatra pretkom.
- Životinja kao roditelj roditelja 'Sisavaca', stoga se smatra pretkom.
Sada trebamo identificirati samo jedan element koji je klasa 'Životinja'. Možemo koristiti XPath kako je spomenuto u nastavku.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
Ako želite doći do teksta 'Životinja', ispod XPath se može koristiti.
# 2) Predak ili ja
Dnevnik: Da bi se identificirao kontekstni čvor i element pretka iz kontekstnog čvora.
XPath # 1: // div (@ class = ’Sisavac’) / predak-ili-sam :: div
Gornji XPath # 1 baca tri odgovarajuća čvora:
- Životinja (predak)
- Kralježnjaka
- Sisavac (samo)
# 3) Dijete
Dnevnik: Identificirati dijete kontekstnog čvora 'Sisavac'.
XPath # 1: // div (@ class = ’Sisavac’) / dijete :: div
XPath # 1 pomaže identificirati svu djecu kontekstnog čvora 'Sisavac'. Ako želite dobiti određeni podređeni element, upotrijebite XPath # 2.
XPath # 2: // div (@ class = 'Sisavac') / dijete :: div (@ class = 'Biljojed') / h5
# 4) Potomak
Dnevnik: Identificirati djecu i unuke kontekstnog čvora (na primjer: ‘Životinja’).
XPath # 1: // div (@ class = ’Animal’) / potomak :: div
Kako je Animal glavni član hijerarhije, svi se dijelovi i potomci ističu. Također možemo promijeniti čvor konteksta za našu referencu i koristiti bilo koji element koji želimo kao čvor.
# 5) Potomak ili ja
Dnevnik: Da bi se pronašao sam element i njegovi potomci.
XPath1: // div (@ class = 'Animal') / potomak-ili-sam :: div
Jedina razlika između potomaka i potomka-ili-ja je u tome što se ističe osim što ističe potomke.
# 6) Slijedi
Dnevnik: Da biste pronašli sve čvorove koji slijede čvor konteksta. Ovdje je čvor konteksta div koji sadrži element Sisavci.
XPath: // div (@ class = ’Sisavac’) / slijedi :: div
U slijedećim osima svi čvorovi koji slijede čvor konteksta, bilo da je to dijete ili potomak, postaju istaknuti.
# 7) Sljedbeni brat
Dnevnik: Da biste pronašli sve čvorove nakon čvora konteksta koji dijele istog roditelja i koji su brat ili sestra čvora konteksta.
XPath: // div (@ class = ’Sisavac’) / sljedbenik / sestra :: div
Glavna razlika između sljedećeg i srodnog brata je ta što sljedični brat uzima sve čvorove nakon konteksta, ali će također dijeliti istog roditelja.
# 8) Prethodno
Dnevnik: Potrebni su svi čvorovi koji dolaze prije čvora konteksta. To može biti roditelj ili čvor bake i djeda.
Ovdje je čvor konteksta Beskralježnjak, a istaknute crte na gornjoj slici su svi čvorovi koji dolaze ispred čvora Beskralježnjaka.
# 9) Prethodni brat ili sestra
Dnevnik: Da biste pronašli brata i sestru koji dijeli istog roditelja kao i čvor konteksta, a koji dolazi prije čvora konteksta.
Kako je čvor konteksta beskralješnjak, jedini element koji se ističe je kralježnjak, jer su ova dvojica braća i sestre i dijele istog roditelja ‘Životinja’.
# 10) Roditelj
Dnevnik: Da biste pronašli nadređeni element čvora konteksta. Ako je sam kontekstni čvor predak, neće imati nadređeni čvor i neće dohvatiti odgovarajuće čvorove.
Kontekstni čvor # 1: Sisavci
XPath: // div (@ class = ’Sisavac’) / nadređeni :: div
Kako je čvor konteksta Sisavac, element s kralježnjacima postaje istaknut jer je nadređeni sisavcu.
Kontekstni čvor # 2: Životinja
XPath: // div (@ class = 'Animal') / nadređeni :: div
Kako je sam čvor životinje predak, neće istaknuti nijedan čvor, pa stoga nisu pronađeni odgovarajući čvorovi.
# 11) Ja
Dnevnik: Da bi se pronašao čvor konteksta, koristi se self.
Kontekstni čvor: Sisavac
XPath: // div (@ class = ’Sisavac’) / self :: div
Kao što gore možemo vidjeti, objekt Sisavci identificiran je jedinstveno. Također možemo odabrati tekst „Sisavci koristeći donji XPath.
XPath: // div (@ class = ’Sisavac’) / self :: div / h4
besplatni YouTube Video Converter u mp4
Upotrebe prethodnih i slijedećih osi
Pretpostavimo da znate da je vaš ciljni element koliko oznaka ispred ili nazad od kontekstnog čvora, možete izravno označiti taj element, a ne sve elemente.
Primjer: prethodnica (s indeksom)
Pretpostavimo da je naš čvor konteksta 'Ostalo' i želimo doći do elementa 'Sisavac', za to bismo koristili donji pristup.
Prvi korak: Jednostavno upotrijebite prethodno bez davanja vrijednosti indeksa.
XPath: // div (@ class = 'Other') / prethodni :: div
To nam daje 6 podudarnih čvorova, a želimo samo jedan ciljani čvor „Sisavac“.
Drugi korak: Dajte vrijednost indeksa (5) elementu div (brojanjem prema gore od kontekstnog čvora).
XPath: // div (@ class = 'Other') / prethodni :: div (5)
Na taj je način element 'Sisavac' uspješno identificiran.
Primjer: slijedeći (s indeksom)
Pretpostavimo da je naš čvor konteksta „Sisavac“ i želimo doći do elementa „Rakovi“, za to ćemo upotrijebiti donji pristup.
Prvi korak: Jednostavno upotrijebite sljedeće bez davanja vrijednosti indeksa.
XPath: // div (@ class = ’Sisavac’) / slijedi :: div
To nam daje 4 podudarna čvora, a želimo samo jedan ciljani čvor „Rakovi“
Drugi korak: Dajte vrijednost indeksa (4) elementu div (računajte unaprijed od kontekstnog čvora).
XPath: // div (@ class = 'Ostalo') / sljedeće :: div (4)
Na ovaj je način element “Rakovi” uspješno identificiran.
Gornji scenarij također se može ponovno stvoriti pomoću prethodni brat ili sestra i sljedbenici primjenom gornjeg pristupa.
Zaključak
Identifikacija predmeta najvažniji je korak u automatizaciji bilo kojeg web mjesta. Ako uspijete steći vještinu da točno naučite predmet, 50% automatizacije je gotovo. Iako su dostupni lokatori za identificiranje elementa, postoje neki slučajevi kada čak i lokatori ne uspijevaju identificirati objekt. U takvim slučajevima moramo primijeniti različite pristupe.
Ovdje smo koristili XPath funkcije i XPath osi za jedinstvenu identifikaciju elementa.
Završavamo ovaj članak zapisujući nekoliko točaka koje treba zapamtiti:
- Ne biste trebali primjenjivati osi 'predak' na čvoru konteksta koji je sam čvor pretka.
- Ne biste trebali primjenjivati 'roditeljske' osi na kontekstni čvor kontekstnog čvora koji je sam predak.
- Ne biste trebali primjenjivati osi 'dijete' na kontekstnom čvoru samog kontekstnog čvora koji je potomak.
- Ne biste trebali primjenjivati osi 'potomak' na kontekstni čvor samog kontekstnog čvora koji je predak.
- Ne biste trebali primjenjivati osi 'sljedeće' na kontekstnom čvoru koji je posljednji čvor u strukturi HTML dokumenta.
- Ne biste trebali primjenjivati 'prethodne' osi na kontekstni čvor, to je prvi čvor u strukturi HTML dokumenta.
Sretno učenje !!!
=> Posjetite ovdje za ekskluzivnu seriju vodiča za trening selena.
Preporučena literatura
- XPath funkcije za dinamički XPath u selenu
- Vodič za krastavac selenij: Integracija Java Selenium WebDriver krastavaca
- Lokatori selena: prepoznavanje web elemenata pomoću XPath-a u selenu (primjeri)
- Uvod u Selenium WebDriver - Vodič za selen br. 8
- Vodič za ChromeDriver Selenium: Testovi Selenium Webdriver-a na Chromeu
- Implementacija naše prve skripte WebDriver - Vodič br. 10 za Selenium WebDriver
- 30+ najboljih vodiča za selen: naučite selen na stvarnim primjerima
- Rukovanje web tablicama, okvirima i dinamičkim elementima u skriptu Selenium - Vodič za selen # 18