xpath functions dynamic xpath selenium
Denne opplæringen forklarer bruken av XPath-funksjoner for å identifisere elementene med eksempler:
Før du automatiserer et nettsted, er det nødvendig å identifisere objektet riktig før vi kan utføre noen operasjoner på det samme. Som vi vet at den enkleste måten å identifisere elementet er ved attributter som ID, navn, lenke, klasse eller et hvilket som helst annet unikt attributt som er tilgjengelig med taggen der elementet ligger.
Dette er bare mulig når disse attributtene er til stede og / eller er unike, slik at objektet blir identifisert riktig.
=> Ta en titt på Selenium Beginners Guide her.
Hva du vil lære:
Oversikt over XPath-funksjoner
La oss diskutere scenariet der attributtene ikke er lett tilgjengelige.
Problemstilling
Hvordan identifiserer vi elementet hvis lokalisatorene som ID, navn, klasse, lenke, etc. ikke er tilgjengelige i elementet?
Dette kan forstås tydelig med det gitte eksemplet:
Logg på Twitter
Som du kan se i skjermbildet ovenfor, har overskriften 'Logg på Twitter' ingen attributter knyttet til den. Når det er sagt, kan vi ikke bruke noen av lokalisatorene som ID, klasse, lenke eller navn for å identifisere dette elementet.
hvordan åpner jeg en .bin fil?
Firepath-pluginet til Firefox-verktøyet har generert XPath nedenfor:
// * [@ id = ’side-container’] / div / div [1] / h1
Vi vil ikke anbefale bruk av ovennevnte XPath som sidestruktur eller id, da det kan endres dynamisk. Hvis vi bruker denne ustabile XPath, må vi kanskje endre XPath oftere, noe som er mer tidkrevende å vedlikeholde. Dette er et tilfelle der vi ikke kan bruke det generiske XPath-uttrykket med lokaliseringer som id, klasse, navn eller lenke.
Løsning
Identifisere elementet ved hjelp av XPath-funksjonene etter tekst
Siden vi har den synlige teksten 'Logg inn på Twitter' tilgjengelig hos oss, vil vi benytte oss av følgende XPath-funksjoner for å identifisere elementet unikt.
- inneholder () [Ved tekst]
- starter-med () [Ved tekst]
- tekst()
XPath-funksjoner som inneholder (), starter-med () og tekst () når de brukes ved hjelp av teksten 'Logg inn på Twitter' vil hjelpe oss med å identifisere elementet riktig, og ytterligere operasjoner kan utføres på det samme.
# 1) Inneholder () Metode:
Syntaks: For å finne 'Logg inn på Twitter' -elementet, bruk et av følgende XPath-uttrykk som inkluderer inneholder () -metoden.
Etter tekst
- // h1 [inneholder (tekst (), 'Logg inn på')]
- // h1 [inneholder (tekst (), ’inn på Twitter’)]
Merk: 1 samsvarende node indikerer at web-elementet er identifisert.
Fra eksemplet ovenfor er det tydelig at metoden inneholder () ikke trenger den absolutte (full) teksten for å identifisere elementet riktig. Delteksten er nok til å identifisere den riktig. Den valgte delvise teksten skal imidlertid være unik. Brukeren kan enkelt identifisere elementet selv om retningen på siden endres ved hjelp av inneholder () -metoden.
Vær oppmerksom på at selv om du bruker den absolutte teksten 'Logg inn på Twitter' med inneholder () -metoden, vil elementet bli identifisert riktig.
# 2) Starter med () -metoden:
Syntaks: For å finne 'Logg inn på Twitter' '-elementet, bruk følgende eksempler på XPath-uttrykk som har start-med () -metoden.
Etter tekst
- // h1 [starter-med (tekst (), 'Logg inn')]
- // h1 [starter-med (tekst (), 'Logg inn på')]
Fra eksemplet ovenfor er det klart at XPath-funksjonene starter med () -metoden krever minst det første ordet ('Logg') i den synlige teksten for å identifisere elementet unikt. Det fungerer også på delteksten og vil mislykkes hvis vi ikke inkluderer det første ordet i den delvis synlige teksten.
Vær oppmerksom på at selv om du bruker den absolutte teksten 'Logg inn på Twitter' med starter-med () -metoden, vil elementet bli identifisert riktig.
Ugyldig XPath for starter-med (): // h1 [starter-med (tekst (), ’inn til Twitter’)]
Merk: Ingen samsvarende noder indikerer at webelementet ikke er identifisert.
# 3) Tekst () metode:
Syntaks: For å finne 'Logg inn på Twitter' -elementet, bruk følgende XPath-uttrykk som har tekst () -metoden.
I dette uttrykket bruker vi den absolutte teksten som er tilstede mellom start-koden. Hvis vi bruker tekst () -funksjon med delvis Xpath som vi gjør i inneholder () og starter med (), ville vi ikke kunne finne elementet.
Ugyldig Xpath for tekst ():
Identifisere elementet ved hjelp av XPath-funksjonene etter attributt
Vi bruker XPath-funksjonene (inneholder eller begynner med) med attributt når det er noen unikt identifiserte attributtverdier tilgjengelig i container-taggen. Du får tilgang til attributter ved å bruke “@” -symbolet.
Dette kan forstås tydelig med det gitte eksempel:
Logg på Google
# 1) Inneholder () Metode:
Syntaks: For å identifisere knappen 'I'm Feeling Lucky' på en unik måte ved hjelp av XPath-funksjonen inneholder () ved hjelp av attributt.
(i) Etter verdien attributt:
- // input [inneholder (@ verdi, 'Feeling')]
- // input [inneholder (@ verdi, 'Lucky')]
Fra bildene ovenfor er det forstått at bruk av attributtverdien med enten 'Feeling' eller 'Lucky' med inneholder () -metoden vil identifisere elementet unikt. Det er imidlertid viktig å merke seg at selv om vi bruker det komplette innholdet i Value-attributtet, vil det identifisere elementet riktig.
(ii) Etter navn-attributt:
//input[contains(@name=’btnI’)]
Det ugyldige tilfellet for XPath-funksjon med attributtet:
Vi må være veldig forsiktige med å velge attributtet som skal brukes med metoden inneholder () og starter-med (). Hvis attributtverdien ikke er unik, kan vi ikke identifisere elementet unikt.
Anta at hvis vi tar 'type' -attributtet når vi identifiserer 'Jeg føler meg heldig' -knappen, fungerer ikke XPath.
To samsvarende noder indikerer at elementet ikke er identifisert riktig. Her er ikke attributtverdien unik.
# 2) Starter med () -metoden:
Start-med () -metoden med attributtet er veldig nyttig når vi må finne elementene hvis tidligere del av attributtet forblir fast mens den senere delen fortsetter å endres. Denne tilnærmingen er veldig nyttig når objektene endrer verdien av attributtene dynamisk. Dette kan også brukes hvis vi ønsker å fange lignende typer elementer.
Gå til Facebook-pålogging
Inspiser den første tekstboksen 'Fornavn' og den andre tekstboksen 'Etternavn' i registreringsskjemaet.
Den første tekstboksen “Fornavn” identifiseres.
Den andre tekstboksen “Etternavn” er identifisert.
I begge tekstboksene som er identifisert for Registrer deg for Facebook, forblir startdelen av id-attributtene uendret.
Fornavn id = “u_0_2”
Etternavn id = ’u_0_4”
Dette er scenariet der vi kan bruke attributtet starter-med () for å få alle elementene under en slik type id-attributt. Vær oppmerksom på at vi bare tar disse to feltene som referanse. Det kan imidlertid være flere felt på skjermen med ID-er som starter med 'u_0_'.
Starter med () [Etter attributt-id]
//input[starts-with(@id,”u_0_”)]
Viktig notat: Her har vi brukt doble anførselstegn i stedet for enkelt anførselstegn. Men enkelt anførselstegn vil også fungere med start-up metoden.
11 samsvarende noder indikerer at denne XPath har identifisert alle elementene idene starter med “u_0_”. Den siste delen av id (2 for fornavn, 4 for etternavn osv.) Bestemmer hvordan vi unikt identifiserer elementet.
Vi kan bruke start-med-funksjonsattributtet der vi trenger å samle den samme typen elementer i en liste, og velg dynamisk en av dem ved å omgå argumentet i en generisk metode for å identifisere elementet unikt.
Følg eksemplet nedenfor for å bruke startsett-funksjonen til vår fordel.
Eksempelkode:
/* 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. }
Merk: Formørkelse tillater kanskje ikke bruk av dobbelt anførselstegn. Du må kanskje ty til annen kode for å lage dynamisk XPath.
Eksempelkoden er gitt som referanse. Du kan forbedre den slik at den passer inn i alle elementene og operasjonene du vil utføre, og verdiene du vil angi (i tilfelle tekstfelt) for å gjøre koden mer allsidig.
Konklusjon
Denne artikkelen forklarte hvordan vi kan bruke XPath Functions inneholder (), starter med () og tekst () med attributt og tekst for å identifisere elementene på HTML DOM-strukturen på en unik måte.
Nedenfor er noen av observasjonene vi kan tegne for XPath-funksjonene:
- Bruk 'inneholder ()' -metoden i XPath hvis du kjenner den delvis synlige teksten eller attributtet.
- Bruk 'starter-med ()' -metoden i XPath hvis du kjenner den første delvise synlige teksten eller attributtet.
- Du kan også bruke inneholder () og starter-med () -metoden med absolutt tekst eller attributt.
- Benytt deg av “tekst ()” -metoden i XPath hvis du er klar over den absolutt synlige teksten.
- Du kan ikke bruke tekst () -metoden med delteksten.
- Du kan ikke bruke start-med () -metoden hvis den opprinnelige teksten ikke brukes i XPath, eller hvis den første teksten endres kontinuerlig.
I neste opplæring vil vi lære hvordan vi kan bruke XPath Axes med XPath Functions for å forbedre plasseringen av elementer på den tilgjengelige nettsiden ytterligere.
=> Les gjennom The Easy Selenium Training Series.
Anbefalt lesing
- Selen Locators: Identifiser nettelementer ved hjelp av XPath i Selen (eksempler)
- Håndtering av nettbord, rammer og dynamiske elementer i Selenium Script - Selenium Tutorial # 18
- Python-strengfunksjoner
- Xpath Extractor Post-prosessor i JMeter
- Selen Find Element By Text Tutorial med eksempler
- Agurk Selen Tutorial: Agurk Java Selen WebDriver Integration
- En omfattende XPath-opplæring - XML Path Language
- Introduksjon til Selenium WebDriver - Selenium Tutorial # 8