xpath functions dynamic xpath selenium
Denna handledning förklarar användningen av XPath-funktioner för att identifiera elementen med exempel:
Innan du automatiserar en webbplats är det nödvändigt att identifiera objektet korrekt innan vi kan utföra någon operation på samma. Som vi vet är det enklaste sättet att identifiera elementet genom attribut som ID, namn, länk, klass eller något annat unikt attribut som finns med taggen där elementet finns.
Detta är endast möjligt när dessa attribut är närvarande och / eller är unika så att objektet identifieras korrekt.
=> Ta en titt på Selenium Beginners Guide här.
Vad du kommer att lära dig:
Översikt över XPath-funktioner
Låt oss diskutera scenariot där attributen inte är tillgängliga.
Problemförklaring
Hur identifierar vi elementet om lokaliserarna som ID, namn, klass, länk etc. inte är tillgängliga i elementtaggen?
Detta kan förstås tydligt med det givna exemplet:
Logga in Twitter
Som du kan se på skärmbilden ovan har rubriken 'Logga in på Twitter' inga attribut kopplade till den. Med detta sagt kan vi inte använda någon av lokaliserarna som ID, klass, länk eller namn för att identifiera detta element.
den bästa mp3-nedladdningsappen för Android
Firepath-plugin för Firefox-verktyget har genererat nedanstående XPath:
// * (@ id = ’page-container’) / div / div (1) / h1
Vi rekommenderar inte användning av ovanstående XPath som sidstruktur eller id eftersom det kan förändras dynamiskt. Om vi använder denna instabila XPath, kan vi behöva byta XPath oftare vilket är mer tidskrävande att underhålla. Detta är ett fall där vi inte kan använda det generiska XPath-uttrycket med lokaliserare som id, klass, namn eller länk.
Lösning
Identifiera elementet med hjälp av XPath-funktionerna med text
Eftersom vi har den synliga texten 'Logga in på Twitter' tillgänglig hos oss skulle vi använda följande XPath-funktioner för att identifiera elementet unikt.
- innehåller () (Efter text)
- börjar med () (Av text)
- text()
XPath-funktioner som innehåller (), börjar-med () och text () när de används med hjälp av texten 'Logga in på Twitter' skulle hjälpa oss att identifiera elementet korrekt, och ytterligare operationer kan utföras på samma.
# 1) Innehåller () Metod:
Syntax: För att hitta webb-elementet 'Logga in på Twitter', använd något av följande XPath-uttryck som innehåller innehåller () -metoden.
Efter text
- // h1 (innehåller (text (), 'Logga in till'))
- // h1 (innehåller (text (), 'in till Twitter'))
Obs! En matchande nod indikerar att webbelementet har identifierats framgångsrikt.
Från exemplet ovan är det tydligt att metoden innehåller () inte behöver den absoluta (fullständiga) texten för att identifiera elementet korrekt. Deltexten räcker för att identifiera den korrekt. Den valda deltexten bör dock vara unik. Användaren kan enkelt identifiera elementet även om orienteringen på sidan ändras med hjälp av den innehåller () -metoden.
Observera att även om du använder den absoluta texten 'Logga in på Twitter' med innehåller () -metoden skulle elementet identifieras korrekt.
# 2) Börjar med () -metoden:
Syntax: För att hitta webbelementet 'Logga in på Twitter', använd följande XPath-uttryck som har start-med () -metoden.
Efter text
- // h1 (börjar-med (text (), 'Logga in'))
- // h1 (börjar-med (text (), 'Logga in till'))
Från ovanstående exempel är det tydligt att XPath-funktionerna börjar med () -metoden kräver åtminstone det första ordet ('Logg') i den synliga texten för att identifiera elementet unikt. Det fungerar också på deltexten och misslyckas om vi inte inkluderar det första ordet i den delvis synliga texten.
Observera att även om du använder den absoluta texten 'Logga in på Twitter' med start-med () -metoden kommer elementet att identifieras korrekt.
Ogiltig XPath för start-med (): // h1 (börjar-med (text (), 'in till Twitter'))
Notera: Inga matchande noder indikerar att webbelementet inte har identifierats.
# 3) Metod för text ():
Syntax: För att hitta webbelementet 'Logga in på Twitter', använd följande XPath-uttryck som har text () -metoden.
I detta uttryck använder vi den absoluta texten som finns mellan starttaggen. Om vi använder text () -funktionen med partiell Xpath som vi gör i innehåller () och börjar med (), skulle vi inte kunna hitta elementet.
Ogiltig Xpath för text ():
Identifiera elementet med XPath-funktionerna efter attribut
Vi använder XPath-funktionerna (innehåller eller börjar med) med attribut när det finns några unikt identifierade attributvärden tillgängliga i containertaggen. Attribut nås med '@' -symbolen.
Detta kan förstås tydligt med det givna exempel:
Logga in Google
# 1) Innehåller () Metod:
Syntax: Att unikt identifiera 'Jag har tur' -knappselementet med hjälp av XPath-funktionen innehåller () med hjälp av attribut.
(i) Efter värdeattribut:
- // input (innehåller (@ värde, 'Feeling'))
- // input (innehåller (@ värde, 'Lucky'))
Från bilderna ovan är det underförstått att användning av attributvärdet med antingen 'Feeling' eller 'Lucky' med innehåller () -metoden kommer att identifiera elementet unikt. Det är dock viktigt att notera att även om vi använder hela innehållet i Value-attributet kommer det att identifiera elementet korrekt.
(ii) Attribut efter namn:
//input(contains(@name=’btnI’))
Ogiltigt fall för XPath-funktion med attributet:
Vi måste vara mycket försiktiga med att välja attributet som ska användas med metoden innehåller () och börjar med (). Om attributvärdet inte är unikt kan vi inte identifiera elementet unikt.
Antag att om vi tar attributet 'typ' när vi identifierar knappen 'Jag känner mig lycklig' fungerar inte XPath.
Två matchande noder indikerar att elementet inte har identifierats korrekt. Här är typattributvärdet inte unikt.
# 2) Börjar med () -metoden:
Start-med () -metoden med attributet är mycket användbar när vi måste hitta de element vars tidigare del av attributet förblir fast medan den senare delen fortsätter att förändras. Detta tillvägagångssätt är mycket användbart när objekten dynamiskt ändrar värdet på dess attribut. Detta kan också användas om vi vill fånga liknande typer av element.
Gå till Facebook inloggning
Inspektera den första textrutan 'Förnamn' och den andra textrutan 'Efternamn' i registreringsformuläret.
Den första textrutan ”Förnamn” identifieras.
Den andra textrutan 'Efternamn' identifieras.
I båda textrutorna som identifieras för Registrera dig på Facebook förblir startdelen av id-attributen oförändrad.
Förnamn id = “u_0_2”
Efternamn id = ’u_0_4”
Detta är scenariot där vi kan använda attributet startar med () för att få alla element under en sådan typ av id-attribut. Observera att vi bara tar dessa två fält som referens. Det kan dock finnas fler fält på skärmen med id: n som börjar med 'u_0_'.
Börjar med () (Av attribut-id)
//input(starts-with(@id,”u_0_”))
Viktig notering: Här har vi använt dubbla citat istället för enstaka citat. Men enstaka citat fungerar också med start-met-metoden.
11 matchande noder indikerar att denna XPath har identifierat alla element som id: n börjar med 'u_0_'. Den senare delen av id (2 för förnamn, 4 för efternamn, etc.) avgör hur vi unikt identifierar elementet.
Vi kan använda attributet start-med-funktion där vi behöver samla in samma typ av element i en lista och dynamiskt välja en av dem genom att kringgå argumentet i en generisk metod för att identifiera elementet unikt.
Följ nedanstående exempel för att använda start-med-funktionen till vår fördel.
Exempelkod:
/* 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. }
Notera: Eclipse tillåter kanske inte användning av dubbla citat. Du kan behöva använda en annan kod för att skapa dynamisk XPath.
Exempelkoden ges som referens. Du kan förbättra den för att passa in i alla element och de operationer du vill utföra och de värden du vill ange (vid textfält) för att göra koden mer mångsidig.
Slutsats
Den här artikeln förklarade hur vi kan använda XPath-funktioner innehåller (), börjar med () och text () med attribut och text för att identifiera elementen i HTML DOM-strukturen unikt.
Nedan följer några av de observationer som vi kan rita för XPath-funktionerna:
- Använd 'innehåller ()' -metoden i XPath om du känner till den delvisa synliga texten eller attributet.
- Använd 'börjar-med ()' -metoden i XPath om du känner till den initiala partiella konstanta synliga texten eller attributet.
- Du kan också använda innehåller () och börjar-med () -metoden med absolut text eller attribut.
- Använd 'text ()' -metoden i XPath om du känner till den absolut synliga texten.
- Du kan inte använda text () -metoden med deltexten.
- Du kan inte använda start-med () -metoden om den ursprungliga texten inte används i XPath eller om den ursprungliga texten hela tiden förändras.
I nästa handledning kommer vi att lära oss hur man använder XPath Axes med XPath-funktioner för att ytterligare förbättra placeringen av element på den tillgängliga webbsidan.
=> Läs igenom The Easy Selenium Training Series.
Rekommenderad läsning
- Selen Locators: Identifiera webbelement med XPath i Selen (exempel)
- Hantering av webbtabeller, ramar och dynamiska element i Selen Script - Selen Tutorial # 18
- Python-strängfunktioner
- Xpath Extractor Post-Processor i JMeter
- Selen Find Element by Text Tutorial med exempel
- Gurka Selen Tutorial: Gurka Java Selen WebDriver Integration
- En omfattande XPath-handledning - XML Path Language
- Introduktion till Selen WebDriver - Selen Tutorial # 8