xpath functions dynamic xpath selenium
Denne vejledning forklarer brugen af XPath-funktioner til identifikation af elementerne med eksempler:
Inden automatisering er ethvert websted nødvendigt for at identificere objektet korrekt, før vi kan udføre nogen handlinger på det samme. Som vi ved, er den nemmeste måde at identificere elementet på ved hjælp af attributter som ID, navn, link, klasse eller enhver anden unik attribut, der er tilgængelig med det tag, hvor elementet befinder sig.
Dette er kun muligt, når disse attributter er til stede og / eller er unikke, så objektet identificeres korrekt.
=> Se på Selenium Beginners Guide her.
Hvad du vil lære:
Oversigt over XPath-funktioner
Lad os diskutere scenariet, hvor attributterne ikke er let tilgængelige.
Problemformulering
Hvordan identificerer vi elementet, hvis lokalisatorerne som ID, navn, klasse, link osv. Ikke er tilgængelige i elementtagget?
Dette kan forstås tydeligt med det givne eksempel:
Log ind på Twitter
Som du kan se i ovenstående skærmbillede, har overskriften 'Log ind på Twitter' ingen attributter knyttet til det. Når det er sagt, kan vi ikke bruge nogen af lokalisatorerne som ID, klasse, link eller navn til at identificere dette element.
boblesorteringsfunktion c ++
Firepath-pluginet til Firefox-værktøjet har genereret nedenstående XPath:
// * (@ id = ’side-container’) / div / div (1) / h1
Vi anbefaler ikke brugen af ovenstående XPath som sidestruktur eller id, da det kan ændre sig dynamisk. Hvis vi gør brug af denne ustabile XPath, er vi muligvis nødt til at ændre XPath oftere, hvilket er mere tidskrævende at vedligeholde. Dette er et tilfælde, hvor vi ikke kan bruge det generiske XPath-udtryk med lokaliseringer som id, klasse, navn eller link.
Opløsning
Identificering af elementet ved hjælp af XPath-funktionerne efter tekst
Da vi har den synlige tekst 'Log ind på Twitter' tilgængelig hos os, bruger vi følgende XPath-funktioner for at identificere elementet entydigt.
- indeholder () (Efter tekst)
- starter med () (Efter tekst)
- tekst()
XPath-funktioner som indeholder (), starter med () og tekst () når de bruges ved hjælp af teksten 'Log ind på Twitter' vil hjælpe os med at identificere elementet korrekt, og yderligere operationer kan udføres på det samme.
# 1) Indeholder () Metode:
Syntaks: For at finde webelementet 'Log ind på Twitter' skal du bruge et af følgende XPath-udtryk, der indeholder indeholder () -metoden.
Efter tekst
- // h1 (indeholder (tekst (), 'Log ind på'))
- // h1 (indeholder (tekst (), 'ind på Twitter'))
Bemærk: 1 matchende node angiver, at web-elementet er blevet identificeret med succes.
Fra ovenstående eksempel er det klart, at metoden indeholder () ikke behøver den absolutte (fulde) tekst for at identificere elementet korrekt. Delteksten er nok til at identificere den korrekt. Den valgte deltekst skal dog være unik. Brugeren kan let identificere elementet, selvom orienteringen af siden ændres ved hjælp af metoden indeholder ().
Bemærk, at selvom du bruger den absolutte tekst 'Log ind på Twitter' med indeholder () -metoden, ville elementet blive identificeret korrekt.
# 2) Starter med () -metoden:
Syntaks: For at finde webelementet 'Log ind på Twitter' 'skal du bruge følgende eksempler på XPath-udtryk, der har start-med () -metoden.
Efter tekst
- // h1 (starter med (tekst (), 'Log ind'))
- // h1 (starter-med (tekst (), 'Log ind på'))
Fra ovenstående eksempel er det klart, at XPath-funktionerne starter med () -metoden kræver mindst det første ord ('Log') i den synlige tekst for entydigt at identificere elementet. Det fungerer også på delteksten og mislykkes, hvis vi ikke inkluderer det første ord i den delvis synlige tekst.
Bemærk, at selvom du bruger den absolutte tekst 'Log ind på Twitter' med metoden starter-med (), vil elementet blive identificeret korrekt.
Ugyldig XPath til starter-med (): // h1 (starter-med (tekst (), 'ind til Twitter'))
Bemærk: Ingen matchende noder indikerer, at webelementet ikke er identificeret.
# 3) Tekst () metode:
Syntaks: For at finde web-elementet 'Log ind på Twitter' skal du bruge følgende XPath-udtryk, der har tekst () -metoden.
I dette udtryk bruger vi den absolutte tekst, der findes mellem startkoden. Hvis vi bruger tekst () -funktion med delvis Xpath, som vi gør i indeholder () og starter-med (), ville vi ikke være i stand til at finde elementet.
Ugyldig Xpath for tekst ():
Identificering af elementet ved hjælp af XPath-funktionerne efter attribut
Vi bruger XPath-funktionerne (indeholder eller starter-med) med attribut, når der er nogle entydigt identificerede attributværdier tilgængelige i containertagget. Du får adgang til attributter ved hjælp af symbolet “@”.
Dette kan forstås tydeligt med det givne eksempel:
Log ind på Google
# 1) Indeholder () Metode:
Syntaks: At identificere entydigt knappen 'I'm Feeling Lucky' ved hjælp af XPath-funktionen indeholder () ved hjælp af attribut.
(i) Efter attribut for værdi:
- // input (indeholder (@ værdi, 'Feeling'))
- // input (indeholder (@ værdi, 'Lucky'))
Fra ovenstående billeder forstås det, at brug af attributværdien med enten 'Feeling' eller 'Lucky' med indeholder () -metoden entydigt identificerer elementet. Det er dog vigtigt at bemærke, at selvom vi bruger det komplette indhold af Value-attributten, vil det identificere elementet korrekt.
(ii) Efter attribut:
//input(contains(@name=’btnI’))
Det ugyldige tilfælde for XPath-funktion med attributten:
Vi skal være meget forsigtige med at vælge den attribut, der skal bruges med metoden indeholder () og starter-med (). Hvis attributværdien ikke er unik, kan vi ikke identificere elementet entydigt.
Antag, hvis vi tager attributten 'type', når vi identificerer knappen 'Jeg føler mig heldig', fungerer XPath ikke.
2 matchende noder angiver, at elementet ikke er identificeret korrekt. Her er typeattributværdien ikke unik.
# 2) Starter med () -metoden:
Start-med () -metoden med attributten er meget nyttig, når vi skal finde de elementer, hvis tidligere del af attributten forbliver fast, mens den senere del bliver ved med at ændre sig. Denne tilgang er meget nyttig, når objekterne dynamisk ændrer værdien af dets attributter. Dette kan også bruges, hvis vi ønsker at fange lignende slags elementer.
Gå til Facebook login
Undersøg det første tekstfelt 'Fornavn' og det andet tekstfelt 'Efternavn' i tilmeldingsformularen.
Det første tekstfelt “Fornavn” identificeres.
Det andet tekstfelt “Efternavn” identificeres.
I begge tekstfelter, der er identificeret til Tilmeld dig Facebook, forbliver startdelen af id-attributterne uændrede.
Fornavn id = “u_0_2”
Efternavn id = ’u_0_4”
Dette er scenariet, hvor vi kan bruge attributten starter med () til at få alle elementerne under en sådan type id-attribut. Bemærk, at vi kun tager disse to felter til vores reference. Der kan dog være flere felter på skærmen med id'er, der starter med 'u_0_'.
Starter med () (Efter attribut-id)
//input(starts-with(@id,”u_0_”))
Vigtig note: Her har vi brugt dobbelt anførselstegn i stedet for enkelt anførselstegn. Men enkelt citater fungerer også med start-med-metoden.
11 matchende noder angiver, at denne XPath har identificeret alle de elementer, disse id'er starter med 'u_0_'. Den sidste del af id'et (2 for fornavn, 4 for efternavn osv.) Bestemmer, hvordan vi entydigt identificerer elementet.
Vi kan bruge attributten starter-med-funktion, hvor vi har brug for at samle den samme type element i en liste og dynamisk vælge en af dem ved at omgå argumentet i en generisk metode til entydigt at identificere elementet.
Følg nedenstående eksempel for at bruge start-med-funktionen til vores fordel.
Prøvekode:
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input(starts-with(@id,”u_0_”+identifier ))')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String() args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
Bemærk: Formørkelse tillader muligvis ikke brugen af dobbelt tilbud. Du skal muligvis ty til en anden kode for at oprette dynamisk XPath.
Prøvekoden er angivet som reference. Du kan forbedre det, så det passer ind i alle de elementer og de operationer, du vil udføre, og de værdier, du vil indtaste (i tilfælde af tekstfelter) for at gøre koden mere alsidig.
Konklusion
Denne artikel forklarede, hvordan vi kan gøre brug af XPath-funktioner indeholder (), starter med () og tekst () med attribut og tekst til entydigt at identificere elementerne i HTML DOM-strukturen.
Nedenfor er nogle af de observationer, som vi kan tegne for XPath-funktionerne:
- Benyt metoden 'indeholder ()' i XPath, hvis du kender den delvise synlige tekst eller attribut.
- Brug 'starter-med ()' -metoden i XPath, hvis du kender den indledende delvise synlige tekst eller attribut.
- Du kan også bruge indeholder () og starter-med () metode med absolut tekst eller attribut.
- Benyt metoden “tekst ()” i XPath, hvis du er opmærksom på den absolutte synlige tekst.
- Du kan ikke bruge tekst () -metoden med delteksten.
- Du kan ikke benytte metoden starter-med (), hvis den oprindelige tekst ikke bruges i XPath, eller hvis den oprindelige tekst konstant ændres.
I den næste vejledning lærer vi, hvordan man bruger XPath Axes med XPath-funktioner for yderligere at forbedre placeringen af elementer på den tilgængelige webside.
=> Læs igennem Easy Selenium Training Series.
Anbefalet læsning
- Selen Locators: Identificer webelementer ved hjælp af XPath i Selen (eksempler)
- Håndtering af webtabeller, rammer og dynamiske elementer i Selenium Script - Selen Tutorial # 18
- Python-strengfunktioner
- Xpath Extractor Post-Processor i JMeter
- Selen Find Element by Text Tutorial med eksempler
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- En omfattende XPath-tutorial - XML Path Language
- Introduktion til Selen WebDriver - Selen Tutorial # 8