xpath axes dynamic xpath selenium webdriver
Denna handledning förklarar XPath-axlar för dynamisk XPath i Selen WebDriver Med hjälp av olika XPath-axlar som används, exempel och förklaring av struktur:
I föregående handledning har vi lärt oss om XPath-funktioner och dess betydelse för att identifiera elementet. Men när mer än ett element har för lika orientering och nomenklatur blir det omöjligt att identifiera elementet unikt.
=> Kolla in den perfekta träningsguiden för selen här.
Vad du kommer att lära dig:
Förstå XPath Axes
Låt oss förstå ovan nämnda scenario med hjälp av ett exempel.
Tänk på ett scenario där två länkar med ”Redigera” text används. I sådana fall blir det relevant att förstå HTML-nodstrukturen.
Kopiera och klistra in koden nedan i anteckningsblocket och spara den som .htm-fil.
Edit Edit
Användargränssnittet ser ut som nedanstående skärm:
Problemförklaring
F # 1) Vad ska jag göra när även XPath-funktioner inte identifierar elementet?
Svar: I ett sådant fall använder vi XPath-axlarna tillsammans med XPath-funktioner.
Den andra delen av denna artikel handlar om hur vi kan använda det hierarkiska HTML-formatet för att identifiera elementet. Vi börjar med att få lite information om XPath Axes.
F # 2) Vad är XPath Axes?
Svar: En XPath-axel definierar noduppsättningen i förhållande till den aktuella (kontext) noden. Den används för att lokalisera noden som är relativt noden i det trädet.
F # 3) Vad är en sammanhangsnod?
Svar: En kontextnod kan definieras som den nod som XPath-processorn för närvarande tittar på.
Olika XPath-axlar som används vid testning av selen
Det finns tretton olika axlar som listas nedan. Vi kommer dock inte att använda dem alla under Selen-test.
- förfader : De här axlarna indikerar alla förfäder i förhållande till kontextnoden och når också upp till rotnoden.
- förfader-eller-själv: Den här anger kontextnoden och alla förfäder i förhållande till kontextnoden och inkluderar rotnoden.
- attribut: Detta indikerar attributen för kontextnoden. Den kan representeras med symbolen “@”.
- barn: Detta indikerar barnen till kontextnoden.
- nedåt: Detta indikerar barnen och barnbarnen och deras barn (om sådana finns) i kontextnoden. Detta indikerar INTE attributet och namnområdet.
- nedstigande eller själv: Detta anger kontextnoden och barnen och barnbarnen och deras barn (om sådana finns) i kontextnoden. Detta anger INTE attributet och namnområdet.
- följande: Detta indikerar alla noder som visas efter sammanhangsnoden i HTML DOM-strukturen. Detta indikerar INTE härkomst, attribut och namnområde.
- följande syskon: Den här indikerar alla syskonnoder (samma förälder som kontextnod) som dyka upp efter kontextnoden i HTML DOM-strukturen. Detta indikerar INTE härkomst, attribut och namnområde.
- namnområde: Detta indikerar alla namnområdets noder för kontextnoden.
- förälder: Detta indikerar föräldern till kontextnoden.
- föregående: Detta indikerar alla noder som visas innan sammanhangsnoden i HTML DOM-strukturen. Detta indikerar INTE härkomst, attribut och namnområde.
- föregående syskon: Den här indikerar alla syskonnoder (samma förälder som kontextnod) som visas innan sammanhangsnoden i HTML DOM-strukturen. Detta indikerar INTE härkomst, attribut och namnområde.
- själv: Den här anger kontextnoden.
Struktur av XPath-axlar
Tänk på nedanstående hierarki för att förstå hur XPath Axes fungerar.
Se nedan en enkel HTML-kod för ovanstående exempel. Kopiera och klistra in koden nedan i anteckningsblockredigeraren och spara den som .html-fil.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Sidan kommer att se ut nedan. Vårt uppdrag är att använda XPath Axes för att hitta elementen unikt. Låt oss försöka identifiera de element som är markerade i diagrammet ovan. Kontextnoden är 'Däggdjur'
# 1) Förfader
Dagbok: För att identifiera förfäderelementet från kontextnoden.
XPath # 1: // div (@ class = ’Mammal’) / förfader :: div
XPath “// div (@ class =’ Mammal ’) / ancestor :: div” kastar två matchande noder:
- Ryggradsdjur, eftersom det är förälder till 'Däggdjur', därför anses det också förfadern.
- Djur som förälder till föräldern till 'Däggdjur', därför anses det vara en förfader.
Nu behöver vi bara identifiera ett element som är 'Animal' -klass. Vi kan använda XPath som nämnts nedan.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
Om du vill nå texten ”Animal”, nedan kan XPath användas.
# 2) Förfader-eller-jag
Dagbok: För att identifiera kontextnoden och förfaderelementet från kontextnoden.
XPath # 1: // div (@ class = ’Mammal’) / förfader-eller-själv :: div
Ovanstående XPath # 1 kastar tre matchande noder:
- Djur (förfader)
- Ryggradsdjur
- Däggdjur (själv)
# 3) Barn
Dagbok: Att identifiera barnet till kontextnoden ”Däggdjur”.
XPath # 1: // div (@ class = ’Mammal’) / child :: div
hur man spelar matroska videofil
XPath # 1 hjälper till att identifiera alla barn till kontextnoden 'Däggdjur'. Om du vill hämta det specifika underordnade elementet, använd XPath # 2.
XPath # 2: // div (@ class = ’Mammal’) / child :: div (@ class = ’Herbivore’) / h5
# 4) Ättling
Dagbok: Att identifiera barn och barnbarn till kontextnoden (till exempel: ”Animal”).
XPath # 1: // div (@ class = ’Animal’) / ättling :: div
Eftersom Animal är den bästa medlemmen i hierarkin, blir alla barn- och efterkommande element markerade. Vi kan också ändra kontextnoden för vår referens och använda valfritt element som nod.
# 5) Ättlingar-eller-jag
Dagbok: Att hitta själva elementet och dess ättlingar.
XPath1: // div (@ class = ’Animal’) / descendant-or-self :: div
Den enda skillnaden mellan ättling och ättling eller själv är att den lyfter fram sig själv utöver att markera ättlingar.
# 6) Följer
Dagbok: För att hitta alla noder som följer kontextnoden. Här är kontextnoden div som innehåller däggdjurselementet.
XPath: // div (@ class = ’Mammal’) / följande :: div
I följande axlar markeras alla noder som följer kontextnoden, vare sig det är barnet eller ättlingen.
# 7) Följande syskon
Dagbok: Att hitta alla noder efter kontextnoden som delar samma förälder och är ett syskon till kontextnoden.
XPath: // div (@ class = ’Mammal’) / följande syskon :: div
Den största skillnaden mellan följande och följande syskon är att följande syskon tar alla syskon noder efter sammanhanget men kommer också att dela samma förälder.
# 8) föregående
Dagbok: Det tar alla noder som kommer före kontextnoden. Det kan vara föräldern eller morföräldernoden.
Här är kontextnoden ryggradslös och markerade linjer i ovanstående bild är alla noder som kommer före ryggradslös nod.
# 9) Före syskon
Dagbok: Att hitta syskonet som delar samma förälder som kontextnoden och som kommer före kontextnoden.
Eftersom kontextnoden är ryggradslös, är det enda elementet som markeras ryggradsdjuret, eftersom dessa två är syskon och delar samma förälder ”djur”.
# 10) Förälder
Dagbok: För att hitta det överordnade elementet i kontextnoden. Om själva sammanhangsnoden är en förfader har den ingen överordnad nod och skulle inte hämta några matchande noder.
Kontextnod nr 1: Däggdjur
XPath: // div (@ class = ’Mammal’) / parent :: div
Eftersom kontextnoden är däggdjur blir elementet med ryggradsdjur markerat eftersom det är föräldern till däggdjuret.
Kontextnod nr 2: djur
XPath: // div (@ class = ’Animal’) / parent :: div
Eftersom själva djurnoden är förfader kommer den inte att markera några noder och därför hittades inga matchande noder.
# 11) Själv
Dagbok: För att hitta kontextnoden används självet.
Kontextnod: Däggdjur
XPath: // div (@ class = ’Mammal’) / self :: div
Som vi kan se ovan har däggdjursobjektet identifierats unikt. Vi kan också välja texten ”Däggdjur genom att använda XPath nedan.
XPath: // div (@ class = ’Mammal’) / self :: div / h4
Användning av föregående och efterföljande axlar
Antag att du vet att ditt målelement är hur många taggar framåt eller bakåt från kontextnoden, du kan direkt markera det elementet och inte alla elementen.
Exempel: föregående (med index)
Låt oss anta att vår kontextnod är 'Annat' och vi vill nå elementet 'Däggdjur', vi skulle använda nedanstående metod för att göra det.
Första steget: Använd bara föregående utan att ge något indexvärde.
XPath: // div (@ class = ’Other’) / föregående :: div
vilket verktyg kan användas för att fånga detaljerad information från ett företags webbplats?
Detta ger oss sex matchande noder, och vi vill bara ha en riktad nod 'Mammal'.
Andra steg: Ge indexvärdet (5) till div-elementet (genom att räkna uppåt från kontextnoden).
XPath: // div (@ class = ’Other’) / föregående :: div (5)
På detta sätt har elementet 'Mammal' identifierats framgångsrikt.
Exempel: följer (med index)
Låt oss anta att vår kontextnod är 'Däggdjur' och vi vill nå elementet 'Kräftdjur', vi kommer att använda nedanstående metod för att göra det.
Första steget: Använd bara följande utan att ge något indexvärde.
XPath: // div (@ class = ’Mammal’) / följande :: div
Detta ger oss fyra matchande noder, och vi vill bara ha en riktad nod 'Kräftdjur'
Andra steg: Ge indexvärdet (4) till div-elementet (räkna framåt från kontextnoden).
XPath: // div (@ class = ’Other’) / följande :: div (4)
På så sätt har 'Crustacean' -elementet identifierats framgångsrikt.
Ovanstående scenario kan också skapas på nytt med föregående syskon och följande syskon genom att tillämpa ovanstående tillvägagångssätt.
Slutsats
Objektidentifiering är det viktigaste steget i automatiseringen av en webbplats. Om du kan skaffa dig skickligheten för att lära dig objektet exakt är 50% av din automatisering klar. Även om det finns lokaliserare tillgängliga för att identifiera elementet, finns det vissa fall där även lokaliserarna inte identifierar objektet. I sådana fall måste vi tillämpa olika tillvägagångssätt.
Här har vi använt XPath-funktioner och XPath-axlar för att identifiera elementet unikt.
Vi avslutar den här artikeln genom att skriva ner några punkter att komma ihåg:
- Du bör inte tillämpa 'förfäder' -axlar på kontextnoden för själva kontextnoden.
- Du bör inte tillämpa 'överordnade' axlar på sammanhangsnoden för själva sammanhangsnoden.
- Du bör inte tillämpa 'underordnade' axlar på kontextnoden för själva sammanhangsnoden.
- Du bör inte tillämpa 'efterkommande' axlar på kontextnoden för själva kontextnoden.
- Du bör inte använda 'följande' axlar på kontextnoden, det är den sista noden i HTML-dokumentstrukturen.
- Du bör inte använda 'föregående' axlar på kontextnoden, det är den första noden i HTML-dokumentstrukturen.
Happy Learning !!!
=> Besök här för den exklusiva Selenium Training Tutorial Series.
Rekommenderad läsning
- XPath-funktioner för dynamisk XPath i selen
- Gurkselen-handledning: Gurka Java Selen WebDriver-integration
- Selen Locators: Identifiera webbelement med XPath i Selen (exempel)
- Introduktion till Selen WebDriver - Selen Tutorial # 8
- ChromeDriver Selen Tutorial: Selen Webdriver Tests på Chrome
- Implementation of Our First WebDriver Script - Selenium WebDriver Tutorial # 10
- 30+ bästa selen-självstudier: Lär dig selen med riktiga exempel
- Hantering av webbtabeller, ramar och dynamiska element i Selen Script - Selen Tutorial # 18