xpath axes dynamic xpath selenium webdriver
Denne vejledning forklarer XPath-akser til dynamisk XPath i Selen WebDriver Ved hjælp af forskellige anvendte XPath-akser, eksempler og forklaring på struktur:
I den foregående tutorial har vi lært om XPath-funktioner og dens betydning for identifikation af elementet. Men når mere end et element har for ens orientering og nomenklatur, bliver det umuligt at identificere elementet entydigt.
=> Tjek den perfekte Selenium-træningsvejledning her.
Hvad du vil lære:
Forståelse af XPath-akser
Lad os forstå det ovennævnte scenario ved hjælp af et eksempel.
Tænk på et scenarie, hvor der bruges to links med 'Edit' -tekst. I sådanne tilfælde bliver det relevant at forstå HTML-nodalstrukturen.
Kopier og indsæt nedenstående kode i notesblok, og gem den som .htm-fil.
Edit Edit
UI vil se ud som nedenstående skærm:
Problemformulering
Q # 1) Hvad skal jeg gøre, når selv XPath-funktioner ikke identificerer elementet?
Svar: I et sådant tilfælde bruger vi XPath-akserne sammen med XPath-funktioner.
Den anden del af denne artikel handler om, hvordan vi kan bruge det hierarkiske HTML-format til at identificere elementet. Vi starter med at få lidt information om XPath Axes.
Q # 2) Hvad er XPath-akser?
Svar: En XPath-akse definerer nodesættet i forhold til den aktuelle (kontekst) node. Det bruges til at lokalisere noden, der er relativ til noden på det træ.
Q # 3) Hvad er en kontekstknude?
software til talegenkendelse er mest populær til
Svar: En kontekstnode kan defineres som den node, XPath-processoren i øjeblikket ser på.
Forskellige XPath-akser, der anvendes til selentestning
Der er tretten forskellige akser, der er anført nedenfor. Vi vil dog ikke bruge dem alle under selentestning.
- forfader : Denne akser angiver alle forfædrene i forhold til kontekstknudepunktet og når også op til rodknudepunktet.
- forfader-eller-selv: Denne angiver kontekstknudepunktet og alle forfædrene i forhold til kontekstknudepunktet og inkluderer rodknudepunktet.
- attribut: Dette angiver attributterne for kontekstnoden. Det kan repræsenteres med symbolet “@”.
- barn: Dette angiver børnene til kontekstknudepunktet.
- nedad: Dette angiver børnene og børnebørnene og deres børn (hvis nogen) i kontekstknudepunktet. Dette angiver IKKE attributten og navneområdet.
- efterkommere-eller-selv: Dette angiver kontekstknudepunktet og børnene og børnebørn og deres børn (hvis nogen) i kontekstknudepunktet. Dette angiver IKKE attributten og navneområdet.
- følge: Dette indikerer alle de noder, der vises efter kontekstknudepunktet i HTML DOM-strukturen. Dette angiver IKKE efterkommere, attribut og navneområde.
- følgende søskende: Denne indikerer alle søskendeknuderne (samme forælder som kontekstknude), der komme til syne efter kontekstknudepunktet i HTML DOM-strukturen. Dette angiver IKKE efterkommere, attribut og navneområde.
- navneområde: Dette angiver alle navneområdeknudepunkterne for kontekstknudepunktet.
- forælder: Dette indikerer forælderen til kontekstknudepunktet.
- foregående: Dette indikerer alle de noder, der vises Før kontekstknudepunktet i HTML DOM-strukturen. Dette angiver IKKE efterkommere, attribut og navneområde.
- foregående søskende: Denne indikerer alle søskendeknuderne (samme forælder som kontekstknudepunkt), der vises Før kontekstknudepunktet i HTML DOM-strukturen. Dette angiver IKKE efterkommere, attribut og navneområde.
- selv: Denne indikerer kontekstknudepunktet.
Opbygning af XPath-akser
Overvej nedenstående hierarki for at forstå, hvordan XPath Axes fungerer.
Se nedenfor en simpel HTML-kode for ovenstående eksempel. Kopier og indsæt nedenstående kode i notesblokeditoren, og gem den som .html-fil.
Animal
Vertebrate
Fish
Mammal
Herbivore
Carnivore
Lion
Tiger
Other
Invertebrate
Insect
Crustacean
Siden ser ud som nedenfor. Vores mission er at gøre brug af XPath Axes til at finde elementerne entydigt. Lad os prøve at identificere de elementer, der er markeret i diagrammet ovenfor. Kontekstnoden er 'Pattedyr'
# 1) Forfader
Dagbog: At identificere forfædreelementet fra kontekstnoden.
XPath # 1: // div (@ class = ’Mammal’) / forfader :: div
XPath “// div (@ class =’ Mammal ’) / forfader :: div” kaster to matchende noder:
- Hvirveldyr, da det er forælder til “Pattedyr”, betragtes det derfor også som forfædren.
- Dyr som det er forælder til 'Mammal' forælder, derfor betragtes det som en forfader.
Nu skal vi kun identificere et element, der er 'Animal' klasse. Vi kan bruge XPath som nævnt nedenfor.
XPath#2: //div(@class='Mammal')/ancestor::div(@class='Animal')
Hvis du vil nå teksten “Animal”, kan XPath nedenfor bruges.
# 2) Forfader-eller-selv
Dagbog: At identificere kontekstknudepunktet og forfædreelementet fra kontekstknudepunktet.
XPath # 1: // div (@ class = ’Mammal’) / forfader-eller-selv :: div
Ovenstående XPath # 1 kaster tre matchende noder:
- Dyr (forfader)
- Hvirveldyr
- Pattedyr (selv)
# 3) Barn
Dagbog: At identificere barnet til kontekstknudepunktet 'Pattedyr'.
XPath # 1: // div (@ class = ’Mammal’) / child :: div
XPath # 1 hjælper med at identificere alle børn i kontekstknudepunktet 'Pattedyr'. Hvis du vil hente det specifikke underordnede element, skal du bruge XPath # 2.
XPath # 2: // div (@ class = ’Mammal’) / child :: div (@ class = ’Herbivore’) / h5
# 4) Efterkommer
Dagbog: At identificere børn og børnebørn i kontekstknudepunktet (for eksempel: 'Animal').
XPath # 1: // div (@ class = ’Animal’) / efterkommer :: div
Da Animal er det øverste medlem i hierarkiet, bliver alle underordnede og efterkommende elementer fremhævet. Vi kan også ændre kontekstnoden til vores reference og bruge ethvert element, vi ønsker, som noden.
# 5) Efterkommer-eller-selv
Dagbog: At finde selve elementet og dets efterkommere.
XPath1: // div (@ class = ’Animal’) / efterkommer-eller-selv :: div
Den eneste forskel mellem efterkommere og efterkommere eller selv er, at den fremhæver sig selv ud over at fremhæve efterkommerne.
# 6) Følger
Dagbog: For at finde alle de noder, der følger kontekstnoden. Her er kontekstknudepunktet den div, der indeholder Mammal-elementet.
XPath: // div (@ class = ’Mammal’) / følgende :: div
I de følgende akser bliver alle knudepunkter, der følger kontekstnoden, det være sig barnet eller efterkommeren, fremhævet.
# 7) Efterfølgende søskende
Dagbog: At finde alle noder efter kontekstnoden, der deler den samme forælder og er søskende til kontekstnoden.
XPath: // div (@ class = ’Mammal’) / følgende søskende :: div
Den største forskel mellem følgende og følgende søskende er, at den følgende søskende tager alle søskendeknuderne efter konteksten, men også vil dele den samme forælder.
# 8) Forudgående
Dagbog: Det tager alle de noder, der kommer før kontekstnoden. Det kan være forælder eller bedsteforældres knude.
Her er kontekstnoden hvirvelløse og fremhævede linjer i ovenstående billede er alle de noder, der kommer før hvirvelløse noden.
# 9) Forudgående søskende
Dagbog: At finde det søskende, der deler den samme forælder som kontekstnoden, og som kommer før kontekstnoden.
gratis systemrens til Windows 7
Da kontekstknudepunktet er hvirvelløse, er det eneste element, der bliver fremhævet, hvirveldyret, da disse to er søskende og deler den samme forælder 'Animal'.
# 10) Forælder
Dagbog: For at finde det overordnede element i kontekstnoden. Hvis selve kontekstnoden er en forfader, har den ikke en overordnet node og henter ingen matchende noder.
Kontekstknude nr. 1: Pattedyr
XPath: // div (@ class = ’Mammal’) / forælder :: div
Da kontekstknudepunktet er Pattedyr, bliver elementet med hvirveldyr fremhævet, da det er forælderen til Pattedyren.
Kontekstknude nr. 2: dyr
XPath: // div (@ class = ’Animal’) / parent :: div
Da selve dyreknudepunktet er forfader, fremhæver det ingen noder, og der blev derfor ikke fundet nogen matchende noder.
# 11) Selv
Dagbog: For at finde kontekstnoden bruges selvet.
Kontekstknude: Pattedyr
XPath: // div (@ class = ’Mammal’) / self :: div
Som vi kan se ovenfor, er pattedyrsobjektet identificeret entydigt. Vi kan også vælge teksten “Pattedyr ved hjælp af nedenstående XPath.
XPath: // div (@ class = ’Mammal’) / self :: div / h4
Anvendelse af forudgående og efterfølgende akser
Antag at du ved, at dit målelement er, hvor mange tags der er foran eller tilbage fra kontekstknudepunktet, kan du direkte fremhæve dette element og ikke alle elementerne.
Eksempel: Forudgående (med indeks)
Lad os antage, at vores kontekstknude er 'Andet', og vi vil nå elementet 'Pattedyr', vi vil bruge nedenstående tilgang til at gøre det.
Første skridt: Brug blot foregående uden at give nogen indeksværdi.
XPath: // div (@ class = ’Other’) / foregående :: div
Dette giver os 6 matchende noder, og vi vil kun have en målrettet node 'Pattedyr'.
Andet trin: Giv indeksværdien (5) til div-elementet (ved at tælle opad fra kontekstnode).
XPath: // div (@ class = ’Other’) / foregående :: div (5)
På denne måde er elementet 'Pattedyr' blevet identificeret med succes.
Eksempel: følgende (med indeks)
Lad os antage, at vores kontekstknude er 'Pattedyr', og vi ønsker at nå elementet 'krebsdyr', vi vil bruge nedenstående tilgang til at gøre det.
Første skridt: Brug blot følgende uden at give nogen indeksværdi.
XPath: // div (@ class = ’Mammal’) / følgende :: div
Dette giver os 4 matchende noder, og vi vil kun have en målrettet node 'Crustacean'
Andet trin: Giv indeksværdien (4) til div-elementet (tæl fremad fra kontekstnoden).
XPath: // div (@ class = ’Other’) / følgende :: div (4)
På denne måde er 'krebsdyr' -elementet blevet identificeret med succes.
Ovenstående scenario kan også genskabes med foregående søskende og efterfølgende søskende ved at anvende ovenstående fremgangsmåde.
Konklusion
Objektidentifikation er det mest afgørende trin i automatiseringen af ethvert websted. Hvis du kan tilegne dig færdigheden til at lære objektet nøjagtigt, er 50% af din automatisering færdig. Mens der er lokaliseringer til rådighed til at identificere elementet, er der nogle tilfælde, hvor selv lokalisatorerne ikke identificerer objektet. I sådanne tilfælde skal vi anvende forskellige tilgange.
Her har vi brugt XPath-funktioner og XPath-akser til entydigt at identificere elementet.
Vi afslutter denne artikel med at skrive et par punkter, der skal huskes:
- Du bør ikke anvende 'forfædre' akser på kontekstknudepunktet for selve kontekstknudepunktet.
- Du skal ikke anvende 'overordnede' akser på kontekstknudepunktet for selve kontekstknudepunktet.
- Du skal ikke anvende 'underordnede' akser på kontekstknudepunktet for selve kontekstknudepunktet.
- Du bør ikke anvende 'efterkommende' akser på kontekstknudepunktet for selve kontekstknudepunktet.
- Du skal ikke anvende 'følgende' akser på kontekstnoden, det er den sidste node i HTML-dokumentstrukturen.
- Du skal ikke anvende 'foregående' akser på kontekstnoden, det er den første node i HTML-dokumentstrukturen.
Glad læring !!!
=> Besøg her for den eksklusive tutorial-serie om træning af selen.
Anbefalet læsning
- XPath-funktioner til dynamisk XPath i selen
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- Selen Locators: Identificer webelementer ved hjælp af XPath i Selen (eksempler)
- Introduktion til Selen WebDriver - Selen Tutorial # 8
- ChromeDriver Selenium-tutorial: Selenium Webdriver-test på Chrome
- Implementering af vores første WebDriver Script - Selenium WebDriver Tutorial # 10
- 30+ bedste selen-tutorials: Lær selen med rigtige eksempler
- Håndtering af webtabeller, rammer og dynamiske elementer i Selenium Script - Selen Tutorial # 18