XPath ind Selenium: Hvordan finder og skriver man? (Tekst, Indeholder OG)
Hvad er XPath i Selenium?
XPath ind Selenium er en XML-sti, der bruges til at navigere gennem sidens HTML-struktur. Det er en syntaks eller et sprog til at finde ethvert element på en webside ved hjælp af XML-stiudtryk. XPath kan bruges til både HTML- og XML-dokumenter til at finde placeringen af ethvert element på en webside ved hjælp af HTML DOM-struktur.
In Selenium automatisering, hvis elementerne ikke findes af de generelle locatorer som id, klasse, navn osv., så bruges XPath til at finde et element på websiden.
I denne øvelse lærer vi om Xpath og forskellige XPath-udtryk for at finde de komplekse eller dynamiske elementer, hvis attributter ændres dynamisk ved opdatering eller andre operationer.
XPath-syntaks
XPath indeholder stien til elementet placeret på websiden. Standard XPath-syntaks til oprettelse af XPath er.
Xpath=//tagname[@attribute='value']
Det grundlæggende format for XPath i selen er forklaret nedenfor med skærmbillede.
- // : Vælg den aktuelle node.
- Tagnavn: Tagnavn på den bestemte node.
- @: Vælg attribut.
- Egenskab: Attributnavn på noden.
- Værdi: Værdien af attributten.
For at finde elementet på websider nøjagtigt er der forskellige typer lokalisatorer:
XPath-lokalisatorer | Find forskellige elementer på websiden |
---|---|
ID | For at finde elementet efter elementets ID |
Klassenavn | For at finde elementet efter klassenavn på elementet |
Navn | For at finde elementet efter elementets navn |
Linktekst | For at finde elementet efter teksten i linket |
XPath | XPath påkrævet for at finde det dynamiske element og krydse mellem forskellige elementer på websiden |
CSS-sti | CSS-stien lokaliserer også elementer uden navn, klasse eller ID. |
Typer af X-sti
Der er to typer XPath:
1) Absolut XPath
2) Relativ XPath
Absolut XPath
Det er den direkte måde at finde elementet på, men ulempen ved den absolutte XPath er, at hvis der er foretaget ændringer i elementets sti, så bliver XPath mislykket.
Nøglekarakteristikken ved XPath er, at den begynder med den enkelte fremadgående skråstreg(/), hvilket betyder, at du kan vælge elementet fra rodnoden.
Nedenfor er eksemplet på et absolut Xpath-udtryk af elementet vist på nedenstående skærm.
BEMÆRK: Du kan øve følgende XPath-øvelse på dette http://demo.guru99.com/test/selenium-xpath.html
Klik link. hvis videoen ikke er tilgængelig
Absolut 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]
Relativ Xpath
Relativ Xpath starter fra midten af HTML DOM-strukturen. Det starter med dobbelt skråstreg (//). Det kan søge i elementer hvor som helst på websiden, betyder, at du ikke behøver at skrive en lang xpath, og du kan starte fra midten af HTML DOM-strukturen. Relativ Xpath foretrækkes altid, da det ikke er en komplet sti fra rodelementet.
Nedenfor er eksemplet på et relativt XPath-udtryk af det samme element vist på nedenstående skærm. Dette er det almindelige format, der bruges til at finde element af XPath.
Klik link. hvis videoen ikke er tilgængelig
Relative XPath: //div[@class='featured-box cloumnsize1']//h4[1]//b[1]
Hvad er XPath-akser.
XPath-akser søger efter forskellige noder i XML-dokument fra den aktuelle kontekstknude. XPath-akser er de metoder, der bruges til at finde dynamiske elementer, som ellers ikke er mulige ved normal XPath-metode uden ID, Klassenavn, Navn osv.
Axe-metoder bruges til at finde de elementer, som ændres dynamisk ved opdatering eller andre operationer. Der er få aksemetoder, der almindeligvis anvendes i Selenium Webdriver som barn, forælder, forfader, søskende, forudgående, selv osv.
Sådan skriver du dynamisk XPath i Selenium webdriver
1) Grundlæggende XPath
XPath udtryk vælg noder eller liste over noder på basis af attributter som ID, navn, klassenavnosv. fra XML-dokumentet som illustreret nedenfor.
Xpath=//input[@name='uid']
Her er et link for at få adgang til siden http://demo.guru99.com/test/selenium-xpath.html
Nogle mere grundlæggende xpath-udtryk:
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='//guru99.com/images/home/java.png']
2) Indeholder()
Contains() er en metode, der bruges i XPath-udtryk. Det bruges, når værdien af en attribut ændres dynamisk, for eksempel login-oplysninger.
Indeholder-funktionen har en evne til at finde elementet med delvis tekst som vist i XPath-eksemplet nedenfor.
I dette eksempel forsøgte vi at identificere elementet ved blot at bruge en delvis tekstværdi af attributten. I det nedenstående XPath-udtryk bruges delvis værdi 'sub' i stedet for indsend-knappen. Det kan observeres, at elementet er fundet med succes.
Den fulde værdi af 'Type' er 'submit', men bruger kun en delvis værdi 'sub'.
Xpath=//*[contains(@type,'sub')]
Den fulde værdi af 'navn' er 'btnLogin', men bruger kun en delvis værdi 'btn'.
Xpath=//*[contains(@name,'btn')]
I ovenstående udtryk har vi taget 'navnet' som en attribut og 'btn' som en delværdi som vist på nedenstående skærmbillede. Dette vil finde 2 elementer (LOGIN & NULSTIL), da deres 'navn'-attribut begynder med 'btn'.
Tilsvarende har vi i nedenstående udtryk taget 'id' som en attribut og 'besked' som en delværdi. Dette vil finde 2 elementer ('Bruger-ID må ikke være tomt' & 'Adgangskode må ikke være tomt'), da dens 'id'-attribut begynder med 'besked'.
Xpath=//*[contains(@id,'message')]
I nedenstående udtryk har vi taget "teksten" af linket som en attribut og 'her' som en delværdi som vist på nedenstående skærmbillede. Dette vil finde linket ('her'), da det viser teksten 'her'.
Xpath=//*[contains(text(),'here')]
Xpath=//*[contains(@href,'guru99.com')]
3) Brug ELLER & OG
I OR-udtryk bruges to betingelser, uanset om 1. betingelse ELLER 2. betingelse skal være sand. Det gælder også, hvis en betingelse er sand eller måske begge dele. Betyder, at enhver betingelse skal være sand for at finde elementet.
I XPath-udtrykket nedenfor identificerer det de elementer, hvis enkelte eller begge betingelser er sande.
Xpath=//*[@type='submit' or @name='btnReset']
Fremhævelse af begge elementer som "LOGIN "-element med attributten 'type' og "RESET"-element med attributten 'navn'.
I AND-udtryk bruges to betingelser, begge betingelser skal være sande for at finde elementet. Det lykkes ikke at finde element, hvis en betingelse er falsk.
Xpath=//input[@type='submit' and @name='btnLogin']
I udtrykket nedenfor fremhæves 'LOGIN'-elementet, da det har både attributten 'type' og 'navn'.
4) Xpath starter-med
XPath starter-med() er en funktion, der bruges til at finde det webelement, hvis attributværdi bliver ændret ved opdatering eller ved andre dynamiske operationer på websiden. I denne metode matches startteksten for attributten for at finde det element, hvis attributværdi ændres dynamisk. Du kan også finde elementer, hvis attributværdi er statisk (ikke ændringer).
For eksempel -: Antag, at id'et for et bestemt element ændres dynamisk som:
Id=" message12"
Id=" message345"
Id=" message8769"
og så videre.. men den indledende tekst er den samme. I dette tilfælde bruger vi Start-med udtryk.
I udtrykket nedenfor er der to elementer med et id, der starter "besked" (dvs. 'Bruger-ID må ikke være tomt' & 'Adgangskode må ikke være tomt'). I eksemplet nedenfor finder XPath det element, hvis 'ID' starter med 'besked'.
Xpath=//label[starts-with(@id,'message')]
5) XPath Text() Funktion
XPath text() funktion er en indbygget funktion af selen webdriver, som bruges til at lokalisere elementer baseret på tekst i et webelement. Det hjælper med at finde de nøjagtige tekstelementer, og det lokaliserer elementerne i sættet af tekstnoder. De elementer, der skal lokaliseres, skal være i strengform.
I dette udtryk, med tekstfunktion, finder vi elementet med nøjagtig tekstmatch som vist nedenfor. I vores tilfælde finder vi elementet med teksten "UserID".
Xpath=//td[text()='UserID']
XPath-akser metoder
Disse XPath-aksemetoder bruges til at finde de komplekse eller dynamiske elementer. Nedenfor vil vi se nogle af disse metoder.
For at illustrere disse XPath-akser-metoder, vil vi bruge Guru99 bank-demo-webstedet.
1) Følger
Vælger alle elementer i dokumentet for den aktuelle node( ) [ UserID input box is the current node] som vist på nedenstående skærm.
Xpath=//*[@type='text']//following::input
Der er 3 "input" noder, der matcher ved at bruge "følgende" akse-adgangskode, login og nulstillingsknap. Hvis du vil fokusere på et bestemt element, kan du bruge nedenstående XPath-metode:
Xpath=//*[@type='text']//following::input[1]
Du kan ændre XPath i henhold til kravet ved at sætte [1],[2]…………og så videre.
Med input som '1', finder nedenstående skærmbillede den særlige node, der er 'Password' input box element.
2) Stamfader
Forfaderaksen vælger alle forfædreelementer (bedsteforælder, forælder osv.) for den aktuelle node som vist på nedenstående skærmbillede.
I nedenstående udtryk finder vi forfædres element i den nuværende node ("ENTERPRISE TESTING" node).
Xpath=//*[text()='Enterprise Testing']//ancestor::div
Der er 13 "div"-knuder, der matcher ved at bruge "forfader"-aksen. Hvis du vil fokusere på et bestemt element, kan du bruge nedenstående XPath, hvor du ændrer tallet 1, 2 efter dit krav:
Xpath=//*[text()='Enterprise Testing']//ancestor::div[1]
Du kan ændre XPath i henhold til kravet ved at sætte [1], [2]…………og så videre.
3) Barn
Vælger alle underordnede elementer af den aktuelle node (Java) som vist på nedenstående skærm.
Xpath=//*[@id='java_technologies']//child::li
Der er 71 "li"-knuder, der matcher ved at bruge "barn"-aksen. Hvis du vil fokusere på et bestemt element, kan du bruge nedenstående xpath:
Xpath=//*[@id='java_technologies']//child::li[1]
Du kan ændre xpath i henhold til kravet ved at sætte [1],[2]…………og så videre.
4) Foregående
Vælg alle noder, der kommer før den aktuelle node som vist på nedenstående skærm.
I udtrykket nedenfor identificerer det alle input-elementerne før "LOGIN"-knappen, dvs Bruger ID og adgangskode input element.
Xpath=//*[@type='submit']//preceding::input
Der er 2 "input" noder, der matcher ved at bruge "forudgående" akse. Hvis du vil fokusere på et bestemt element, kan du bruge nedenstående XPath:
Xpath=//*[@type='submit']//preceding::input[1]
Du kan ændre xpath i henhold til kravet ved at sætte [1],[2]…………og så videre.
5) Følgende søskende
Vælg følgende søskende til kontekstnoden. Søskende er på samme niveau som den aktuelle node som vist på nedenstående skærm. Det vil finde elementet efter den aktuelle node.
xpath=//*[@type='submit']//following-sibling::input
En input noder matcher ved at bruge "følgende-søskende"-aksen.
6) Forælder
Vælger forælderen til den aktuelle node som vist på nedenstående skærm.
Xpath=//*[@id='rt-feature']//parent::div
Der er 65 "div"-knuder, der matcher ved at bruge "forælder"-aksen. Hvis du vil fokusere på et bestemt element, kan du bruge nedenstående XPath:
Xpath=//*[@id='rt-feature']//parent::div[1]
Du kan ændre XPath i henhold til kravet ved at sætte [1],[2]…………og så videre.
7) Selv
Vælger den aktuelle node eller 'selv' betyder, at det angiver selve knudepunktet som vist på nedenstående skærm.
En node matcher ved at bruge "selv" akse. Den finder altid kun én node, da den repræsenterer selv-element.
Xpath =//*[@type='password']//self::input
8) Efterkommer
Vælger efterkommerne af den aktuelle node som vist på nedenstående skærm.
I det nedenstående udtryk identificerer det alle elementets efterkommere til det aktuelle element (rammeelement 'Main body surround'), hvilket betyder nede under noden (child node, grandchild node, osv.).
Xpath=//*[@id='rt-feature']//descendant::a
Der er 12 "link"-knuder, der matcher ved at bruge "efterkommer"-aksen. Hvis du vil fokusere på et bestemt element, kan du bruge nedenstående XPath:
Xpath=//*[@id='rt-feature']//descendant::a[1]
Du kan ændre XPath i henhold til kravet ved at sætte [1],[2]…………og så videre.
Resumé
XPath er påkrævet for at finde et element på websiden for at udføre en handling på det pågældende element.
- Der er to typer selen XPath:
- Absolut XPath
- Relativ XPath
- XPath-akser er de metoder, der bruges til at finde dynamiske elementer, som ellers ikke er mulige at finde med normal XPath-metode
- XPath-udtryk vælg noder eller liste over noder på basis af attributter som ID, Navn, Klassenavn osv. fra XML-dokumentet.
Tjek også:- Selenium Tutorial for begyndere: Lær WebDriver på 7 dage