I Selenium-automatisering, hvis elementene ikke blir funnet av de generelle lokalisatorene som id, klasse, navn osv., Blir XPath brukt til å finne et element på websiden.
I denne veiledningen vil vi lære om xpath og forskjellige XPath-uttrykk for å finne de komplekse eller dynamiske elementene, hvis attributter endres dynamisk ved oppdatering eller andre operasjoner.
I denne XPath-opplæringen vil du lære-
- Hva er XPath?
- Typer av X-sti
- Absolutt XPath
- Relativ XPath
- Grunnleggende XPath
- Inneholder ()
- Bruk OR & AND
- Starter-med-funksjon
- Tekst()
- XPath akser metoder
- Følgende
- Forfedre
- Barn
- Forutgående
- Følgende søsken
- Foreldre
- Selv
- Etterkommer
Hva er XPath i selen?
XPath in Selenium er en XML-bane som brukes til navigering gjennom HTML-strukturen på siden. Det er en syntaks eller et språk for å finne et hvilket som helst element på en webside ved hjelp av XML-baneuttrykk. XPath kan brukes til både HTML- og XML-dokumenter for å finne plasseringen til et hvilket som helst element på en webside ved hjelp av HTML DOM-struktur.
Det grunnleggende formatet til XPath i selen er forklart nedenfor med skjermbilde.
Grunnleggende format for XPath
Syntaks for XPath-selen:
XPath inneholder banen til elementet som ligger på websiden. Standard XPath-syntaks for å lage XPath er.
Xpath = // tagname [@ attribute = 'value']
- //: Velg nåværende node.
- Tagname: Tagname for den aktuelle noden.
- @: Velg attributt.
- Attributt: Attributtnavn på noden.
- Verdi: Verdien til attributtet.
For å finne elementet på websider nøyaktig, finnes det forskjellige typer lokaliseringer:
XPath Locators | Finn forskjellige elementer på websiden |
ID | For å finne elementet etter ID for elementet |
Klassenavn | For å finne elementet etter Klassens navn på elementet |
Navn | For å finne elementet etter navnet på elementet |
Linktekst | For å finne elementet etter lenken |
XPath | XPath kreves for å finne det dynamiske elementet og krysse mellom forskjellige elementer på websiden |
CSS-bane | CSS-bane finner også elementer uten navn, klasse eller ID. |
Typer av X-sti
Det er to typer XPath:
1) Absolutt XPath
2) Relativ XPath
Absolutt XPath:
Det er den direkte måten å finne elementet på, men ulempen med den absolutte XPath er at hvis det er noen endringer som er gjort i elementets bane, mislykkes XPath.
Hovedkarakteristikken til XPath er at den begynner med en skråstrek fremover (/), noe som betyr at du kan velge elementet fra rotnoden.
Nedenfor er eksemplet på et absolutt xpath-uttrykk for elementet vist på skjermen nedenfor.
MERKNAD: Du kan øve på følgende XPath-øvelse på denne http://demo.guru99.com/test/selenium-xpath.html
Klikk her hvis videoen ikke er tilgjengelig
Absolutt XPath:
/ html / body / div [2] / div [1] / div / h4 [1] / b / html [1] / body [1] / div [2] / div [1] / div [1] / h4 [1] / b [1]
Absolutt XPath
Relativ Xpath:
Relativ Xpath starter fra midten av HTML DOM-strukturen. Det starter med dobbel skråstrek fremover (//). Det kan søke i elementer hvor som helst på websiden, betyr ikke behov for å skrive en lang xpath, og du kan starte fra midten av HTML DOM-struktur. Relativ Xpath foretrekkes alltid, da det ikke er en komplett bane fra rotelementet.
Nedenfor er eksemplet på et relativt XPath-uttrykk for det samme elementet som vises på skjermen nedenfor. Dette er det vanlige formatet som brukes til å finne element av XPath.
Klikk her hvis videoen ikke er tilgjengelig
Relativ XPath: // div [@ class = 'featured-box cloumnsize1'] // h4 [1] // b [1]
Relativ XPath
Hva er XPath-akser.
XPath-akser søker i forskjellige noder i XML-dokument fra gjeldende kontekstnode. XPath Axes er metodene som brukes til å finne dynamiske elementer, som ellers ikke er mulig med normal XPath-metode uten ID, klassenavn, navn osv.
Aksemetoder brukes til å finne de elementene som endres dynamisk ved oppdatering eller andre operasjoner. Det er få aksemetoder som ofte brukes i Selenium Webdriver som barn, foreldre, forfader, søsken, foregående, selv, etc.
Bruker XPath Håndtering av komplekse og dynamiske elementer i selen
1) Grunnleggende XPath:
XPath-uttrykk velger noder eller liste over noder på grunnlag av attributter som ID, navn, klassenavn , etc. fra XML-dokumentet som illustrert nedenfor.
Xpath = // input [@ name = 'uid']
Her er en lenke for å få tilgang til siden http://demo.guru99.com/test/selenium-xpath.html
Grunnleggende XPath
Noen mer grunnleggende xpath-uttrykk:
Xpath = // input [@ type = 'text']Xpath = // label [@ id = 'message23']Xpath = // input [@ value = 'RESET']Xpath = // * [@ class = 'barone']Xpath = // a [@ href = 'http: //demo.guru99.com/']Xpath = //img[@src='//cdn.guru99.com/images/home/java.png.webp ']
2) Inneholder ():
Inneholder () er en metode som brukes i XPath-uttrykk. Den brukes når verdien til et attributt endres dynamisk, for eksempel påloggingsinformasjon.
Funksjonen inneholder inneholder muligheten til å finne elementet med delvis tekst som vist i eksemplet nedenfor XPath.
I dette eksemplet prøvde vi å identifisere elementet ved å bare bruke deltekstverdien til attributtet. I XPath-uttrykket nedenfor brukes delvis verdi 'sub' i stedet for send-knappen. Det kan observeres at elementet blir funnet vellykket.
Fullstendig verdi av 'Type' er 'send', men bruker bare delvis verdi 'sub'.
Xpath = // * [inneholder (@ type, 'sub')]
Fullstendig verdi av 'navn' er 'btnLogin', men bruker bare delvis verdi 'btn'.
Xpath = // * [inneholder (@ navn, 'btn')]
I uttrykket ovenfor har vi tatt 'navnet' som et attributt og 'btn' som en delvis verdi som vist i skjermbildet nedenfor. Dette vil finne to elementer (LOGIN & RESET) da attributtet 'navn' begynner med 'btn'.
På samme måte har vi i uttrykket nedenfor tatt 'id' som et attributt og 'melding' som en delvis verdi. Dette vil finne to elementer ('Bruker-ID må ikke være tom' og 'Passord må ikke være tomt') da 'navn' -attributtet begynner med 'melding'.
Xpath = // * [inneholder (@ id, 'melding')]
I uttrykket nedenfor har vi tatt "teksten" til lenken som attributt og "her" som en delvis verdi som vist i skjermbildet nedenfor. Dette finner lenken ('her') da den viser teksten 'her'.
Xpath = // * [inneholder (tekst (), 'her')]Xpath = // * [inneholder (@ href, 'guru99.com')]
3) Bruke OR & AND:
I ELLER-uttrykk brukes to forhold, om 1. tilstand ELLER 2. betingelse skal være sant. Det er også aktuelt hvis en av betingelsene er oppfylt eller begge deler. Betyr at en hvilken som helst tilstand skal være sant for å finne elementet.
I XPath-uttrykket nedenfor identifiserer det elementene som har en eller begge betingelsene.
Xpath = // * [@ type = 'send' eller @ name = 'btnReset']
Fremhever begge elementene som "LOGIN" -element med attributt "type" og "RESET" -element med attributt "name".
I OG-uttrykk brukes to forhold, begge forhold skal være sanne for å finne elementet. Det finner ikke element hvis noen av betingelsene er falske.
Xpath = // input [@ type = 'send' og @ name = 'btnLogin']
I uttrykket nedenfor markerer du 'LOGIN' elementet som både har attributt 'type' og 'name'.
4) Xpath starter med
XPath starter-med () er en funksjon som brukes til å finne webelementet hvis attributtverdi blir endret ved oppdatering eller ved andre dynamiske operasjoner på websiden. I denne metoden blir startteksten for attributtet matchet for å finne elementet hvis attributtverdi endres dynamisk. Du kan også finne elementer hvis attributtverdi er statisk (ikke endringer).
For eksempel -: Anta at ID for bestemt element endres dynamisk som:
Id = "melding12"
Id = "melding345"
Id = "melding8769"
og så videre ... men den opprinnelige teksten er den samme. I dette tilfellet bruker vi Start-med-uttrykk.
I nedenstående uttrykk er det to elementer med en id som starter "melding" (dvs. "Bruker-ID må ikke være tom" og "Passord må ikke være tomt"). I eksemplet nedenfor finner XPath elementene hvis 'ID' begynner med 'melding'.
Xpath = // label [starts-with (@ id, 'message')]
5) XPath-tekst () -funksjon
Den XPath tekst () -funksjonen er et innebygd funksjon av selen webdriver som brukes til å lokalisere elementer basert på teksten i et nettelement. Det hjelper å finne de eksakte tekstelementene, og det lokaliserer elementene i settet med tekstnoder. Elementene som skal lokaliseres, skal være i strengform.
I dette uttrykket, med tekstfunksjon, finner vi elementet med eksakt tekstmatch som vist nedenfor. I vårt tilfelle finner vi elementet med teksten "UserID".
Xpath = // td [text () = 'Bruker-ID']
6) XPath akser metoder:
Disse XPath-aksemetodene brukes til å finne de komplekse eller dynamiske elementene. Nedenfor ser vi noen av disse metodene.
For å illustrere disse XPath-aksene-metoden, vil vi bruke Guru99-bankens demoside.
a) Følgende:
Velger alle elementene i dokumentet til den nåværende noden () [Bruker-ID-inndataboks er den nåværende noden] som vist på skjermbildet nedenfor.
Xpath = // * [@ type = 'text'] // following :: input
Det er 3 "inngangsnoder" som samsvarer med "følgende" akse-passord, påloggings- og tilbakestillingsknapp. Hvis du vil fokusere på et bestemt element, kan du bruke XPath-metoden nedenfor:
Xpath = // * [@ type = 'text'] // følgende :: input [1]
Du kan endre XPath i henhold til kravet ved å sette [1], [2]
… og så videre.Med inngangen som '1', finner skjermbildet nedenfor den spesifikke noden som er 'Passord' inndatabokselement.
b) Forfedre:
Forfedreaksen velger alle forfedreelementet (besteforeldre, foreldre osv.) Til den nåværende noden som vist på skjermbildet nedenfor.
I uttrykket nedenfor finner vi forfedreelement av den nåværende noden ("ENTERPRISE TESTING" -noden).
Xpath = // * [text () = 'Enterprise Testing'] // forfader :: div
Det er 13 "div" noder som samsvarer ved å bruke "forfedre" akse. Hvis du vil fokusere på et bestemt element, kan du bruke nedenstående XPath, der du endrer tallet 1, 2 i henhold til dine krav:
Xpath = // * [text () = 'Enterprise Testing'] // forfader :: div [1]
Du kan endre XPath i henhold til kravet ved å sette [1], [2]
… og så videre.c) Barn:
Velger alle underordnede elementer i den nåværende noden (Java) som vist på skjermen nedenfor.
Xpath = // * [@ id = 'java_technologies'] // barn :: li
Det er 71 "li" -noder som samsvarer med "barn" -aksen. Hvis du vil fokusere på et bestemt element, kan du bruke xpath nedenfor:
Xpath = // * [@ id = 'java_technologies'] // barn :: li [1]
Du kan endre xpath i henhold til kravet ved å sette [1], [2]
… og så videre.d) Forutgående:
Velg alle noder som kommer før den nåværende noden, som vist på skjermbildet nedenfor.
I nedenstående uttrykk identifiserer den alle inngangselementene før "LOGIN" -knappen som er bruker-ID og passordinngangselement .
Xpath = // * [@ type = 'submit'] // foregående :: input
Det er to "input" noder som samsvarer ved å bruke "foregående" akse. Hvis du vil fokusere på et bestemt element, kan du bruke XPath nedenfor:
Xpath = // * [@ type = 'submit'] // foregående :: input [1]
Du kan endre xpath i henhold til kravet ved å sette [1], [2]
… og så videre.e) Søsken som følger:
Velg følgende søsken til kontekstnoden. Søsken er på samme nivå som den nåværende noden som vist på skjermen nedenfor. Det vil finne elementet etter gjeldende node.
xpath = // * [@ type = 'send'] // følgesøsken :: input
Én inngangsnode samsvarer med "følgesøsken" akse.
f) Forelder:
Velger overordnet til gjeldende node som vist på skjermbildet nedenfor.
Xpath = // * [@ id = 'rt-funksjon'] // foreldre :: div
Det er 65 "div" noder som samsvarer ved å bruke "overordnet" akse. Hvis du vil fokusere på et bestemt element, kan du bruke XPath nedenfor:
Xpath = // * [@ id = 'rt-funksjon'] // foreldre :: div [1]
Du kan endre XPath i henhold til kravet ved å sette [1], [2]
… og så videre.g) Selv:
Velger den nåværende noden eller 'selv' betyr at den angir selve noden som vist på skjermen nedenfor.
En node-matching ved å bruke "selv" akse. Den finner alltid bare en node da den representerer selvelement.
Xpath = // * [@ type = 'passord'] // self :: input
h) Etterkommere:
Velger etterkommerne til den nåværende noden som vist på skjermbildet nedenfor.I nedenstående uttrykk identifiserer den alle elementets etterkommere til gjeldende element ('Main body surround' rammeelement) som betyr nede under noden (undernode, barnebarnode, etc.).
Xpath = // * [@ id = 'rt-funksjon'] // etterkommer :: a
Det er 12 "link" noder som samsvarer ved å bruke "descendant" akse. Hvis du vil fokusere på et bestemt element, kan du bruke XPath nedenfor:
Xpath = // * [@ id = 'rt-funksjon'] // etterkommer :: a [1]
Du kan endre XPath i henhold til kravet ved å sette [1], [2]
… og så videre.Sammendrag:
XPath kreves for å finne et element på websiden for å utføre en operasjon på det bestemte elementet.
- Det er to typer selen XPath:
- Absolutt XPath
- Relativ XPath
- XPath Axes er metodene som brukes til å finne dynamiske elementer, som ellers ikke er mulig å finne ved vanlig XPath-metode
- XPath uttrykk velger noder eller liste over noder på grunnlag av attributter som ID, navn, klassenavn, etc. fra XML-dokumentet.