xpath axes dynamic xpath selenium webdriver
Ta vadnica pojasnjuje osi XPath za dinamični XPath v programu Selenium WebDriver s pomočjo različnih uporabljenih osi XPath, primeri in razlaga strukture:
V prejšnji vadnici smo spoznali funkcije XPath in njihov pomen pri prepoznavanju elementa. Ko pa ima več elementov preveč podobne usmeritve in nomenklature, je nemogoče identificirati element enolično.
=> Tukaj si oglejte Perfect Vodnik za trening selena.
Kaj se boste naučili:
Razumevanje osi XPath
Razumimo zgoraj omenjeni scenarij s pomočjo primera.
Razmislite o scenariju, v katerem sta uporabljeni dve povezavi z besedilom »Uredi«. V takih primerih je primerno razumeti nodalno strukturo HTML-ja.
Prosimo, kopirajte spodnjo kodo v beležko in jo shranite kot datoteko .htm.
Edit Edit
Uporabniški vmesnik bo videti kot spodnji zaslon:
Izjava o težavi
V # 1) Kaj storiti, če niti funkcije XPath ne prepoznajo elementa?
Odgovor: V takem primeru uporabimo osi XPath skupaj s funkcijami XPath.
Drugi del tega članka govori o tem, kako lahko s pomočjo hierarhične oblike HTML prepoznamo element. Začeli bomo z nekaj informacijami o oseh XPath.
V # 2) Kaj so osi XPath?
Odgovor: Osi XPath definirajo nabor vozlišč glede na trenutno (kontekstno) vozlišče. Uporablja se za iskanje vozlišča, ki je relativno na vozlišče na tem drevesu.
V # 3) Kaj je kontekstno vozlišče?
Odgovor: Vozlišče konteksta je mogoče definirati kot vozlišče, ki ga trenutno gleda procesor XPath.
Različne osi XPath, uporabljene pri testiranju selena
Spodaj je naštetih trinajst različnih osi. Vendar pa jih med testiranjem selena ne bomo uporabili.
- prednik : Ta os označuje vse prednike glede na vozlišče konteksta, ki segajo tudi do korenskega vozlišča.
- prednik ali jaz: Ta prikazuje vozlišče konteksta in vse prednike glede na vozlišče konteksta in vključuje korensko vozlišče.
- atribut: To označuje atribute vozlišča konteksta. Lahko je predstavljen s simbolom '@'.
- otrok: To označuje podrejene vozlišča konteksta.
- navzdol: To označuje otroke, vnuke in njihove otroke (če obstajajo) kontekstnega vozlišča. To NE označuje atributov in imenskega prostora.
- potomec-ali-jaz: To označuje kontekstno vozlišče in otroke ter vnuke in njihove otroke (če obstajajo) kontekstnega vozlišča. To NE označuje atributa in imenskega prostora.
- naslednje: To označuje vsa vozlišča, ki se prikažejo po vozlišče konteksta v strukturi HTML DOM. To NE pomeni potomca, atributa in imenskega prostora.
- sorojenci: Ta označuje vsa sorodniška vozlišča (enako nadrejeno kot kontekstno vozlišče) se pojavijo po vozlišču konteksta v strukturi HTML DOM. To NE pomeni potomca, atributa in imenskega prostora.
- imenski prostor: To označuje vsa vozlišča imenskega prostora kontekstnega vozlišča.
- starš: To označuje nadrejeno vozlišče konteksta.
- pred: To označuje vsa vozlišča, ki se prikažejo prej vozlišče konteksta v strukturi HTML DOM. To NE pomeni potomca, atributa in imenskega prostora.
- predhodni brat ali sestra: Ta označuje vsa prikazana vozlišča sorodnikov (enako nadrejeno kot vozlišče konteksta) prej vozlišče konteksta v strukturi HTML DOM. To NE pomeni potomcev, atributov in imenskega prostora.
- jaz: Ta označuje kontekstno vozlišče.
Zgradba osi XPath
Upoštevajte spodnjo hierarhijo, da boste razumeli, kako delujejo osi XPath.
Za zgornji primer glejte spodnjo preprosto kodo HTML. Prosimo, kopirajte spodnjo kodo v urejevalnik beležk in jo shranite kot datoteko .html.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Stran bo videti spodaj. Naše poslanstvo je, da uporabimo osi XPath za edinstveno iskanje elementov. Poskusimo prepoznati elemente, ki so označeni v zgornjem grafikonu. Vozlišče konteksta je 'Sesalci'
# 1) Prednik
Dnevnik: Za prepoznavanje elementa prednika iz vozlišča konteksta.
XPath # 1: // div (@ class = ’Sesalci)) / predak :: div
XPath '// div (@ class = 'Mammal') / ancestor :: div' vrže dve ujemajoči se vozlišči:
- Vretenčarji, saj so starši »sesalcev«, zato tudi veljajo za prednike.
- Žival kot starš starša 'Sesalca', zato velja za prednika.
Zdaj moramo prepoznati samo en element, ki je v razredu 'Žival'. XPath lahko uporabimo, kot je navedeno spodaj.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
Če želite doseči besedilo »Žival«, lahko uporabite XPath pod XPath.
# 2) Prednik ali sam
Dnevnik: Za prepoznavanje vozlišča konteksta in elementa prednika iz vozlišča konteksta.
XPath # 1: // div (@ class = 'Sesalci)) / predak-ali-sam :: div
Zgornji XPath # 1 vrže tri ujemajoča se vozlišča:
- Žival (prednik)
- Vretenčarji
- Sesalci (samo)
# 3) Otrok
Dnevnik: Za prepoznavanje podrejenega vozlišča konteksta 'Sesalci'.
XPath # 1: // div (@ class = 'Mammal') / otrok :: div
za povečanje varnosti notranjega omrežja vašega podjetja
XPath # 1 pomaga prepoznati vse otroke kontekstnega vozlišča »Sesalci«. Če želite dobiti določen podrejeni element, uporabite XPath # 2.
XPath # 2: // div (@ class = 'Mammal') / otrok :: div (@ class = 'Herbivore') / h5
# 4) Potomak
Dnevnik: Za prepoznavanje otrok in vnukov kontekstnega vozlišča (na primer: „Žival“).
XPath # 1: // div (@ class = 'Animal') / potomka :: div
Ker je Animal najvišji član v hierarhiji, so vsi podrejeni in potomci elementi poudarjeni. Prav tako lahko za referenco spremenimo kontekstno vozlišče in kot vozlišče uporabimo kateri koli element, ki ga želimo.
# 5) Potomak ali sam
Dnevnik: Najti sam element in njegove potomce.
XPath1: // div (@ class = 'Animal') / potomec-ali-sam :: div
Edina razlika med potomcem in potomcem ali samim je ta, da se poleg poudarjanja potomcev izpostavi tudi sam.
# 6) Sledi
Dnevnik: Če želite poiskati vsa vozlišča, ki sledijo kontekstnemu vozlišču. Tu je kontekstno vozlišče div, ki vsebuje element Sesalci.
XPath: // div (@ class = 'Sesalci)) / naslednji :: div
V naslednjih oseh so poudarjena vsa vozlišča, ki sledijo kontekstnemu vozlišču, bodisi podrejeni ali potomci.
# 7) Pobratimi
Dnevnik: Če želite poiskati vsa vozlišča za vozliščem konteksta, ki si delijo istega nadrejenega in so sorodnik vozlišča konteksta.
XPath: // div (@ class = 'Sesalci)) / naslednik / sestra :: div
Glavna razlika med naslednjim in sorodnim bratom je, da naslednji brat ali sestra zavzame vsa vozlišča po kontekstu, vendar si bo delil istega starša.
# 8) Predhodno
Dnevnik: Zavzame vsa vozlišča, ki so pred vozliščem konteksta. Lahko je nadrejeno ali vozlišče starih staršev.
Tu je kontekstno vozlišče Nevretenčarji in označene črte na zgornji sliki so vsa vozlišča, ki prihajajo pred vozlišče Nevretenčarjev.
# 9) Predhodni brat ali sestra
Dnevnik: Če želite poiskati sorojenca, ki ima istega nadrejenega kot vozlišče konteksta in je pred vozliščem konteksta.
Ker je kontekstno vozlišče Nevretenčar, je edini element, ki je poudarjen, Vretenčarji, saj sta ta dva brata in sestra in imata isto nadrejeno 'Žival'.
# 10) Starš
Dnevnik: Če želite najti nadrejeni element vozlišča konteksta. Če je kontekstno vozlišče samo prednik, ne bo imelo nadrejenega vozlišča in ne bo dobilo nobenega ujemajočega se vozlišča.
Kontekstno vozlišče št. 1: Sesalci
XPath: // div (@ class = 'Mammal') / nadrejeni :: div
Ker je kontekstno vozlišče Sesalci, je element z vretenčarji poudarjen, saj je nadrejeni sesalcu.
Kontekstno vozlišče št. 2: Žival
XPath: // div (@ class = 'Animal') / nadrejeni :: div
Ker je živalsko vozlišče samo prednik, ne bo poudarilo nobenega vozlišča in zato ni bilo mogoče najti nobenega ujemajočega se vozlišča.
# 11) Jaz
Dnevnik: Za iskanje kontekstnega vozlišča se uporabi self.
Kontekstno vozlišče: Sesalci
XPath: // div (@ class = 'Mammal') / self :: div
Kot lahko vidimo zgoraj, je bil objekt sesalcev identificiran enolično. Besedilo »Sesalci« lahko izberemo tudi s spodnjim XPathom.
XPath: // div (@ class = 'Mammal') / self :: div / h4
Uporabe predhodnih in naslednjih osi
Recimo, da veste, da je vaš ciljni element, koliko oznak je pred ali nazaj od kontekstnega vozlišča, lahko ta element neposredno označite in ne vseh elementov.
Primer: predhodno (z indeksom)
Predpostavimo, da je naše kontekstno vozlišče »Drugo« in želimo doseči element »Sesalci«, za to bi uporabili spodnji pristop.
Prvi korak: Preprosto uporabite predhodno, ne da bi navedli kakršno koli vrednost indeksa.
XPath: // div (@ class = 'Other') / pred :: div
Tako dobimo 6 ujemajočih se vozlišč in želimo samo eno ciljno vozlišče »Sesalci«.
Drugi korak: Podajte vrednost indeksa (5) elementu div (s štetjem navzgor od kontekstnega vozlišča).
XPath: // div (@ class = 'Other') / pred :: div (5)
Na ta način je bil element »sesalci« uspešno prepoznan.
Primer: naslednje (z indeksom)
Predpostavimo, da je naše kontekstno vozlišče »Sesalci« in želimo doseči element »Raki«, za to bomo uporabili spodnji pristop.
Prvi korak: Preprosto uporabite naslednje, ne da bi navedli vrednost indeksa.
XPath: // div (@ class = 'Sesalci)) / naslednji :: div
Tako dobimo 4 ujemajoča se vozlišča in želimo samo eno ciljno vozlišče »Raki«
Drugi korak: Elementu div dodelite vrednost indeksa (4) (štetje naprej od kontekstnega vozlišča).
XPath: // div (@ class = 'Other') / naslednji :: div (4)
Na ta način je bil element 'rak' uspešno prepoznan.
Zgornji scenarij je mogoče znova ustvariti tudi z predhodni brat ali sestra in pobratima z uporabo zgornjega pristopa.
Zaključek
Identifikacija predmeta je najpomembnejši korak pri avtomatizaciji katerega koli spletnega mesta. Če lahko pridobite spretnost natančnega učenja predmeta, opravite 50% avtomatizacije. Čeprav so na voljo lokatorji za identifikacijo elementa, v nekaterih primerih celo lokatorji ne prepoznajo predmeta. V takih primerih moramo uporabiti različne pristope.
Tu smo uporabili funkcije XPath in osi XPath za enolično identifikacijo elementa.
Ta članek zaključujemo tako, da si zapišemo nekaj točk, ki jih je treba zapomniti:
- Na kontekstnem vozlišču kontekstnega vozlišča, ki je samo prednik, ne bi smeli uporabljati osi 'prednik'.
- Na nadomestnem vozlišču kontekstnega vozlišča, ki je samo prednik, ne bi smeli uporabljati 'nadrejenih' osi.
- Osi „otrok“ ne bi smeli uporabljati na kontekstnem vozlišču samega kontekstnega vozlišča, ki je potomec.
- Na kontekstnem vozlišču kontekstnega vozlišča, ki je samo prednik, ne bi smeli uporabljati osi 'potomca'.
- Na kontekstnem vozlišču, ki je zadnje vozlišče v strukturi dokumenta HTML, ne bi smeli uporabljati osi „following“.
- Ne smete uporabljati 'predhodnih' osi na kontekstnem vozlišču, ki je prvo vozlišče v strukturi dokumenta HTML.
Srečno učenje !!!
=> Obiščite tukaj za ekskluzivno serijo vadnic za selen.
Priporočeno branje
- Funkcije XPath za dinamični XPath v selenu
- Vadnica za kumare selena: Integracija kumar Java Selenium WebDriver
- Lokatorji selena: prepoznavanje spletnih elementov s pomočjo XPath v selenu (primeri)
- Uvod v Selenium WebDriver - Vadnica za selenij št. 8
- Vadnica za ChromeDriver Selenium: Testi za selenium Webdriver v Chromu
- Implementacija našega prvega skripta WebDriver - vadnica # 10 za selenium WebDriver
- 30+ najboljših vadnic o selenu: Naučite se selena z resničnimi primeri
- Ravnanje s spletnimi mizami, okvirji in dinamičnimi elementi v skriptu Selenium - Vadnica za selen št. 18