Hur man använder XPath i Selenium? Handledning
Vad är XPath i Selenium?
XPath in Selenium är en XML-sökväg som används för att navigera genom sidans HTML-struktur. Det är en syntax eller ett språk för att hitta ett element på en webbsida med hjälp av XML-sökvägsuttryck. XPath kan användas för både HTML- och XML-dokument för att hitta platsen för alla element på en webbsida med HTML DOM-struktur.
In Selenium automatisering, om elementen inte hittas av de allmänna lokaliseringarna som id, klass, namn, etc. så används XPath för att hitta ett element på webbsidan.
I den här handledningen kommer vi att lära oss om Xpath och olika XPath-uttryck för att hitta de komplexa eller dynamiska elementen, vars attribut ändras dynamiskt vid uppdatering eller andra operationer.
XPath-syntax
XPath innehåller sökvägen till elementet som finns på webbsidan. Standard XPath-syntax för att skapa XPath är.
Xpath=//tagname[@attribute='value']
Det grundläggande formatet för XPath i selen förklaras nedan med skärmdump.
- // : Välj aktuell nod.
- Taggnamn: Tagnamn för den specifika noden.
- @: Välj attribut.
- Attribut: Attributnamn för noden.
- Värde: Värdet på attributet.
För att hitta elementet på webbsidor korrekt finns det olika typer av lokaliseringsverktyg:
XPath -sökare | Hitta olika element på webbsidan |
---|---|
ID | För att hitta elementet efter elementets ID |
Klassnamn | För att hitta elementet efter klassnamn på elementet |
Namn | För att hitta elementet med namnet på elementet |
Länktext | För att hitta elementet med texten i länken |
XPath | XPath krävs för att hitta det dynamiska elementet och gå mellan olika delar av webbsidan |
CSS-sökväg | CSS-sökvägen lokaliserar också element som inte har något namn, klass eller ID. |
Typer av X-väg
Det finns två typer av XPath:
1) Absolut XPath
2) Relativ XPath
Absolut XPath
Det är det direkta sättet att hitta elementet, men nackdelen med den absoluta XPath är att om det görs några ändringar i sökvägen till elementet så misslyckas den XPath.
Det viktigaste kännetecknet för XPath är att det börjar med det enda snedstrecket(/) , vilket betyder att du kan välja elementet från rotnoden.
Nedan är exemplet på ett absolut Xpath-uttryck för elementet som visas på skärmen nedan.
OBS: Du kan träna följande XPath-övning på detta https://demo.guru99.com/test/selenium-xpath.html
Klicka här. om videon inte är tillgänglig
Absolut XPath:
/html/body/div[2]/div[1]/div/h4[1]/b/html[1]/body[1]/div[2]/div[1]/div[1]/h4[1]/b[1]
Relativ Xpath
Relativ Xpath startar från mitten av HTML DOM-strukturen. Det börjar med dubbelt snedstreck (//). Det kan söka element var som helst på webbsidan, betyder att du inte behöver skriva en lång xpath och du kan börja från mitten av HTML DOM-strukturen. Relativ Xpath är alltid att föredra eftersom det inte är en komplett sökväg från rotelementet.
Nedan är ett exempel på ett relativt XPath-uttryck för samma element som visas på skärmen nedan. Detta är det vanliga formatet som används för att hitta element av XPath.
Klicka här. om videon inte är tillgänglig
Relative XPath: //div[@class='featured-box cloumnsize1']//h4[1]//b[1]
Vad är XPath-axlar.
XPath Axes söker efter olika noder i XML-dokument från aktuell kontextnod. XPath-axlar är metoderna som används för att hitta dynamiska element, som annars inte är möjliga med normal XPath-metod utan ID, klassnamn, namn etc. XPath i Selenium innehåller flera metoder som Contains, AND, Absolute XPath och Relative XPath för att identifiera och lokalisera dynamiska element baserat på olika attribut och villkor.
Axemetoder används för att hitta de element som ändras dynamiskt vid uppdatering eller andra operationer. Det finns få axemetoder som ofta används i Selenium Webdriver som barn, förälder, förfader, syskon, föregående, jag, etc.
Hur man skriver Dynamic XPath In Selenium webbdrivrutin
1) Grundläggande XPath
XPath-uttryck välj noder eller lista med noder på basis av attribut som ID , Namn, Klassnamn, etc. från XML-dokumentet som illustreras nedan.
Xpath=//input[@name='uid']
Här är en länk för att komma åt sidan https://demo.guru99.com/test/selenium-xpath.html
Några mer grundläggande xpath-uttryck:
Xpath=//input[@type='text'] Xpath=//label[@id='message23'] Xpath=//input[@value='RESET'] Xpath=//*[@class='barone'] Xpath=//a[@href='https://demo.guru99.com/'] Xpath=//img[@src='//guru99.com/images/home/java.png']
2) Innehåller()
Contains() är en metod som används i XPath-uttryck. Det används när värdet på ett attribut ändras dynamiskt, till exempel inloggningsinformation.
Innehållsfunktionen har en förmåga att hitta elementet med deltext som visas i XPath-exemplet nedan.
I det här exemplet försökte vi identifiera elementet genom att bara använda ett partiellt textvärde för attributet. I XPath-uttrycket nedan används partiellt värde 'sub' istället för submit-knappen. Det kan observeras att elementet hittas framgångsrikt.
Det fullständiga värdet för 'Type' är 'submit' men använder endast partiellt värde 'sub'.
Xpath=//*[contains(@type,'sub')]
Det fullständiga värdet för 'namn' är 'btnLogin' men använder endast partiellt värde 'btn'.
Xpath=//*[contains(@name,'btn')]
I uttrycket ovan har vi tagit "namnet" som ett attribut och "btn" som ett delvärde som visas i skärmdumpen nedan. Detta kommer att hitta 2 element (LOGGA IN & ÅTERSTÄLL) eftersom deras 'name'-attribut börjar med 'btn'.
På liknande sätt har vi i uttrycket nedan tagit "id" som ett attribut och "meddelande" som ett delvärde. Detta kommer att hitta 2 element ('Användar-ID får inte vara tomt' & 'Lösenord får inte vara tomt') eftersom dess 'id'-attribut börjar med 'meddelande'.
Xpath=//*[contains(@id,'message')]
I uttrycket nedan har vi tagit länkens "text" som ett attribut och "här" som ett delvärde som visas i skärmdumpen nedan. Detta kommer att hitta länken ('här') eftersom den visar texten 'här'.
Xpath=//*[contains(text(),'here')]
Xpath=//*[contains(@href,'guru99.com')]
3) Använd ELLER & OCH
I OR-uttryck används två villkor, oavsett om det första villkoret ELLER det andra villkoret ska vara sant. Det är också tillämpligt om något villkor är sant eller kanske båda. Betyder att ett villkor ska vara sant för att hitta elementet.
I XPath-uttrycket nedan identifierar det de element vars enstaka eller båda villkor är sanna.
Xpath=//*[@type='submit' or @name='btnReset']
Markera båda elementen som "LOGIN"-element med attributet 'type' och "RESET"-element med attributet 'name'.
I AND-uttryck används två villkor, båda villkoren bör vara sanna för att hitta elementet. Det misslyckas med att hitta element om något villkor är falskt.
Xpath=//input[@type='submit' and @name='btnLogin']
I uttrycket nedan markerar du elementet 'LOGIN' eftersom det har både attributet 'typ' och 'namn'.
4) Xpath börjar med
XPath börjar-med() är en funktion som används för att hitta webbelementet vars attributvärde ändras vid uppdatering eller av andra dynamiska operationer på webbsidan. I den här metoden matchas starttexten för attributet för att hitta elementet vars attributvärde ändras dynamiskt. Du kan också hitta element vars attributvärde är statiskt (inte ändringar).
Till exempel -: Antag att ett visst elements ID ändras dynamiskt som:
Id=” meddelande12″
Id=” meddelande345″
Id=” meddelande8769″
och så vidare... men den ursprungliga texten är densamma. I det här fallet använder vi Start-med uttryck.
I uttrycket nedan finns det två element med ett id som börjar med "meddelande" (dvs. 'Användar-ID får inte vara tomt' & 'Lösenord får inte vara tomt'). I exemplet nedan hittar XPath de element vars 'ID' börjar med 'meddelande'.
Xpath=//label[starts-with(@id,'message')]
5) XPath Text() Funktion
Smakämnen XPath text() funktion är en inbyggd funktion av selen webdriver som används för att lokalisera element baserat på text i ett webbelement. Det hjälper till att hitta de exakta textelementen och det lokaliserar elementen inom uppsättningen textnoder. Elementen som ska lokaliseras ska vara i strängform.
I detta uttryck, med textfunktion, hittar vi elementet med exakt textmatchning som visas nedan. I vårt fall hittar vi elementet med texten "UserID".
Xpath=//td[text()='UserID']
XPath axlar metoder
Dessa XPath-axlar metoder används för att hitta de komplexa eller dynamiska elementen. Nedan kommer vi att se några av dessa metoder.
För att illustrera dessa XPath-axlar kommer vi att använda Guru99-bankdemosidan.
1) Följer
Väljer alla element i dokumentet för den aktuella noden ( ) [ UserID input box is the current nod] som visas på skärmen nedan.
Xpath=//*[@type='text']//following::input
Det finns 3 "ingångs"-noder som matchar genom att använda "följande" axel-lösenord, inloggning och återställningsknapp. Om du vill fokusera på något speciellt element kan du använda XPath-metoden nedan:
Xpath=//*[@type='text']//following::input[1]
Du kan ändra XPath enligt kraven genom att sätta [1],[2]…………och så vidare.
Med inmatningen som '1' hittar skärmbilden nedan den specifika noden som är inmatningsboxelementet 'Lösenord'.
2) Anfader
Förfaderaxeln väljer alla förfäderselement (farförälder, förälder, etc.) för den aktuella noden som visas på skärmen nedan.
I uttrycket nedan hittar vi förfäderselement för den nuvarande noden (noden "ENTERPRISE TESTING").
Xpath=//*[text()='Enterprise Testing']//ancestor::div
Det finns 13 "div"-noder som matchar genom att använda "förfader"-axeln. Om du vill fokusera på något speciellt element kan du använda XPath nedan, där du ändrar siffran 1, 2 enligt dina krav:
Xpath=//*[text()='Enterprise Testing']//ancestor::div[1]
Du kan ändra XPath enligt kraven genom att sätta [1], [2] ………… och så vidare.
3) Barn
Väljer alla underordnade element i den aktuella noden (Java) som visas på skärmen nedan.
Xpath=//*[@id='java_technologies']//child::li
Det finns 71 "li"-noder som matchar genom att använda "barn"-axeln. Om du vill fokusera på något speciellt element kan du använda nedanstående xpath:
Xpath=//*[@id='java_technologies']//child::li[1]
Du kan ändra xpath enligt kravet genom att sätta [1],[2]…………och så vidare.
4) Föregående
Välj alla noder som kommer före den aktuella noden som visas på skärmen nedan.
I uttrycket nedan identifierar det alla inmatningselement före "LOGGA IN"-knappen dvs Användar ID och Lösenord ingångselement.
Xpath=//*[@type='submit']//preceding::input
Det finns 2 "ingångs"-noder som matchar genom att använda "föregående" axel. Om du vill fokusera på något speciellt element kan du använda XPath nedan:
Xpath=//*[@type='submit']//preceding::input[1]
Du kan ändra xpath enligt kravet genom att sätta [1],[2]…………och så vidare.
5) Följande syskon
Välj följande syskon till kontextnoden. Syskon är på samma nivå som den aktuella noden som visas på skärmen nedan. Den kommer att hitta elementet efter den aktuella noden.
xpath=//*[@type='submit']//following-sibling::input
En ingångsnod matchar genom att använda "följande-syskon"-axeln.
6) Förälder
Väljer föräldern till den aktuella noden som visas på skärmen nedan.
Xpath=//*[@id='rt-feature']//parent::div
Det finns 65 "div"-noder som matchar genom att använda "förälder"-axeln. Om du vill fokusera på något speciellt element kan du använda XPath nedan:
Xpath=//*[@id='rt-feature']//parent::div[1]
Du kan ändra XPath enligt kraven genom att sätta [1],[2]…………och så vidare.
7) Själv
Väljer den aktuella noden eller "jag" betyder att det indikerar själva noden som visas på skärmen nedan.
En nod matchar genom att använda "själv"-axeln. Den hittar alltid bara en nod eftersom den representerar självelement.
Xpath =//*[@type='password']//self::input
8) Ättling
Väljer ättlingar till den aktuella noden som visas på skärmen nedan.
I uttrycket nedan identifierar det alla element avkomlingar till det aktuella elementet (ramelement 'Main body surround') vilket betyder ner under noden (barnnod, barnbarnsnod, etc.).
Xpath=//*[@id='rt-feature']//descendant::a
Det finns 12 "länk"-noder som matchar genom att använda "avkommande"-axeln. Om du vill fokusera på något speciellt element kan du använda XPath nedan:
Xpath=//*[@id='rt-feature']//descendant::a[1]
Du kan ändra XPath enligt kraven genom att sätta [1],[2]…………och så vidare.
Sammanfattning
XPath krävs för att hitta ett element på webbsidan för att göra en operation på det specifika elementet.
- Det finns två typer av selen XPath:
- Absolut XPath
- Relativ XPath
- XPath Axes är metoderna som används för att hitta dynamiska element, som annars inte är möjliga att hitta med normal XPath-metod
- XPath-uttryck välj noder eller lista med noder på basis av attribut som ID, Namn, Klassnamn, etc. från XML-dokumentet.
Kontrollera också: - Selenium Handledning för nybörjare: Lär dig WebDriver på 7 dagar