XPath i Selen WebDriver-handledning: Hur hittar jag XPath?

Innehållsförteckning:

Anonim

I Selen-automatisering, om elementen inte hittas av de allmänna sökarna som id, klass, namn, etc., används XPath för att hitta ett element på webbsidan.

I den här handledningen lär vi oss om xpath och olika XPath-uttryck för att hitta de komplexa eller dynamiska elementen, vars attribut förändras dynamiskt vid uppdatering eller andra operationer.

I denna XPath-handledning lär du dig-

  • Vad är XPath?
  • Typer av X-path
    • Absolut XPath
    • Relativ XPath
  • Grundläggande XPath
  • Innehåller ()
  • Med OR & AND
  • Startar-med-funktion
  • Text()
  • XPath axlar metoder
    • Följande
    • Förfader
    • Barn
    • Föregående
    • Följande syskon
    • Förälder
    • Själv
    • Ättling

Vad är XPath i selen?

XPath in Selenium är en XML-sökväg som används för navigering genom sidans HTML-struktur. Det är en syntax eller ett språk för att hitta något element på en webbsida med XML-sökuttryck. XPath kan användas för både HTML- och XML-dokument för att hitta platsen för vilket element som helst på en webbsida med hjälp av HTML DOM-struktur.

Grundformatet för XPath i selen förklaras nedan med skärmdump.

Grundformat för XPath

Syntax för XPath-selen:

XPath innehåller sökvägen för elementet som finns på webbsidan. Standard XPath-syntax för att skapa XPath är.

Xpath = // tagnamn [@ attribut = 'värde']
  • //: Välj aktuell nod.
  • Tagnam: Tagnamn för den specifika noden.
  • @: Välj attribut.
  • Attribut: Attributnamn för noden.
  • Värde: Attributets värde.

För att hitta elementet på webbsidor exakt finns det olika typer av lokaliserare:

XPath Locators Hitta olika element på webbsidan
ID För att hitta elementet efter elementets ID
Klassnamn För att hitta elementet efter elementets klassnamn
namn Att hitta elementet efter elementets namn
Länktext För att hitta elementet med texten i länken
XPath XPath krävs för att hitta det dynamiska elementet och korsa mellan olika delar av webbsidan
CSS-sökväg CSS-sökvägen hittar också element utan namn, klass eller ID.

Typer av X-path

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 elementets väg så misslyckas XPath.

Nyckelkännetecknet för XPath är att det börjar med ett enda snedstreck (/), vilket innebär att du kan välja elementet från rotnoden.

Nedan visas exemplet på ett absolut xpath-uttryck för elementet som visas på skärmen nedan.

OBS! Du kan öva följande XPath-övning på denna http://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]

Absolut XPath

Relativ Xpath:

Relativ Xpath börjar från mitten av HTML DOM-strukturen. Det börjar med dubbel snedstreck framåt (//). Det kan söka i element var som helst på webbsidan, det betyder inte att du behöver skriva en lång xpath och du kan börja från mitten av HTML DOM-strukturen. Relativ Xpath föredras alltid eftersom det inte är en fullständig sökväg från rotelementet.

Nedan visas exemplet på ett relativt XPath-uttryck av 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

Relativ XPath: // div [@ class = 'featured-box cloumnsize1'] // h4 [1] // b [1]

Relativ XPath

Vad är XPath-axlar.

XPath-axlar söker efter olika noder i XML-dokument från aktuell kontextnod. XPath Axes är de metoder som används för att hitta dynamiska element, vilket annars inte är möjligt med normal XPath-metod utan ID, klassnamn, namn etc.

Axes-metoder används för att hitta de elementen som dynamiskt förändras vid uppdatering eller andra operationer. Det finns få axlar som vanligtvis används i Selen Webdriver som barn, förälder, förfader, syskon, föregående, själv, etc.

Använda XPath-hantering av komplexa och dynamiska element i selen

1) Grundläggande XPath:

XPath-uttryck väljer noder eller lista över noder på grundval 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 http://demo.guru99.com/test/selenium-xpath.html

Grundläggande XPath

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 = 'http: //demo.guru99.com/']Xpath = //img [@src='//cdn.guru99.com/images/home/java.png.webp ']

2) Innehåller ():

Innehåller () är en metod som används i XPath-uttryck. Den används när värdet på något attribut ändras dynamiskt, till exempel inloggningsinformation.

Innehållsfunktionen har möjlighet att hitta elementet med partiell text som visas i nedanstående XPath-exempel.

I det här exemplet försökte vi identifiera elementet genom att bara använda attributets delvisa textvärde. I nedanstående XPath-uttryck används delvärde 'sub' istället för skicka-knappen. Det kan observeras att elementet hittas framgångsrikt.

Komplett värde för 'Typ' är 'skicka' men använder endast delvis värde 'sub'.

Xpath = // * [innehåller (@ typ, 'sub')] 

Hela värdet på 'namn' är 'btnLogin' men använder endast delvis värde 'btn'.

Xpath = // * [innehåller (@ namn, 'btn')]

I ovanstående uttryck har vi tagit 'namnet' som attribut och 'btn' som ett partiellt värde som visas i skärmbilden nedan. Detta hittar två element (LOGIN & RESET) eftersom deras 'name' attribut börjar med 'btn'.

På samma sätt har vi i nedanstående uttryck tagit "id" som attribut och "meddelande" som ett partiellt värde. Detta hittar två element ('User-ID får inte vara tomt' & 'Lösenordet får inte vara tomt') eftersom attributet 'namn' börjar med 'meddelande'.

Xpath = // * [innehåller (@ id, 'meddelande')] 

I nedanstående uttryck har vi tagit länkens "text" som attribut och "här" som ett delvis värde som visas i skärmdumpen nedan. Detta kommer att hitta länken ("här") eftersom den visar texten "här".

Xpath = // * [innehåller (text (), 'här')]Xpath = // * [innehåller (@ href, 'guru99.com')] 

3) Använda ELLER OCH OCH:

I ELLER-uttryck används två villkor, 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 enda eller båda villkoren är sanna.

Xpath = // * [@ type = 'submit' eller @ name = 'btnReset']

Markerar båda elementen som "LOGIN" -element med attribut "typ" och "RESET" -element med attribut "namn".

I OCH-uttryck används två villkor, båda villkoren ska vara sanna för att hitta elementet. Det går inte att hitta element om något villkor är falskt.

Xpath = // input [@ type = 'submit' och @ name = 'btnLogin']

I nedanstående uttryck markeras 'LOGIN' -elementet eftersom det har både attribut '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 genom andra dynamiska åtgärder på webbsidan. I den här metoden matchas attributets starttext för att hitta det element vars attributvärde förändras dynamiskt. Du kan också hitta element vars attributvärde är statiskt (inte ändringar).

Till exempel -: Antag att ID för ett visst element ä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-with expression.

I uttrycket nedan finns det två element med ett id som startar "meddelande" (dvs. "Användar-ID får inte vara tomt" och "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

Den XPath texten () -funktionen är en inbyggd funktion av selen webdriver som används för att lokalisera elementen baserat på text av en bana elementet. Det hjälper till att hitta de exakta textelementen och det lokaliserar elementen inom uppsättningen textnoder. Elementen som ska placeras 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 () = 'Användar-ID'] 

6) Metoder för XPath-axlar:

Dessa XPath-axlar används för att hitta de komplexa eller dynamiska elementen. Nedan ser vi några av dessa metoder.

För att illustrera dessa XPath-axlar använder vi Guru99-bankens demosida.

a) Följande:

Markerar alla element i dokumentet för den aktuella noden () [Inmatningsrutan för användar-ID är den aktuella noden] enligt nedanstående skärm.

Xpath = // * [@ type = 'text'] // följande :: input

Det finns 3 "ingångsnoder" som matchar med "följande" axel-lösenord, inloggning och återställningsknapp. Om du vill fokusera på ett visst element kan du använda nedanstående XPath-metod:

Xpath = // * [@ type = 'text'] // följande :: input [1]

Du kan ändra XPath enligt kravet genom att sätta [1], [2]

… och så vidare.

Med inmatningen som '1' hittar skärmbilden nedan den särskilda noden som är 'Lösenord' inmatningsfältelement.

b) Förfader:

Förfäderaxeln markerar alla förfäderselement (morförälder, förälder etc.) för den aktuella noden som visas på skärmen nedan.

I nedanstående uttryck hittar vi förfäderselement i den aktuella noden ("ENTERPRISE TESTING" -noden).

Xpath = // * [text () = 'Enterprise Testing'] // förfader :: div

Det finns 13 "div" -noder som matchar genom att använda "förfäder" -axeln. Om du vill fokusera på något speciellt element kan du använda nedanstående XPath, där du ändrar siffran 1, 2 enligt dina krav:

Xpath = // * [text () = 'Enterprise Testing'] // förfader :: div [1]

Du kan ändra XPath enligt kravet genom att sätta [1], [2]

… och så vidare.

c) Barn:

Väljer alla underordnade element i den aktuella noden (Java) som visas på skärmen nedan.

Xpath = // * [@ id = 'java_technologies'] // barn :: li

Det finns 71 "li" -noder som matchar med hjälp av "barn" -axeln. Om du vill fokusera på ett visst element kan du använda nedanstående xpath:

Xpath = // * [@ id = 'java_technologies'] // barn :: li [1]

Du kan ändra xpath enligt kravet genom att sätta [1], [2]

… och så vidare.

d) föregående:

Välj alla noder som kommer före den aktuella noden som visas på skärmen nedan.

I nedanstående uttryck identifierar det alla inmatningselement före "LOGIN" -knappen som är användarid och lösenordsinmatningselement .

Xpath = // * [@ type = 'submit'] // föregående :: input

Det finns två "ingångsnoder" som matchar med "föregående" axel. Om du vill fokusera på ett visst element kan du använda nedanstående XPath:

Xpath = // * [@ type = 'submit'] // föregående :: input [1]

Du kan ändra xpath enligt kravet genom att sätta [1], [2]

… och så vidare.

e) Följande syskon:

Välj följande syskon för kontextnoden. Syskon befinner sig på samma nivå som den aktuella noden som visas på skärmen nedan. Det hittar elementet efter den aktuella noden.

 xpath = // * [@ type = 'submit'] // following-syskon :: input

En inmatningsnod som matchar med hjälp av "följande syskon" -axeln.

f) Förälder:

Väljer överordnad till den aktuella noden som visas på skärmen nedan.

Xpath = // * [@ id = 'rt-funktion'] // förälder :: div

Det finns 65 "div" -noder som matchar med "parent" -axeln. Om du vill fokusera på ett visst element kan du använda nedanstående XPath:

Xpath = // * [@ id = 'rt-funktion'] // förälder :: div [1]

Du kan ändra XPath enligt kravet genom att sätta [1], [2]

… och så vidare.

g) Själv:

Väljer aktuell nod eller 'själv' betyder att den anger själva noden som visas på skärmen nedan.

En nodmatchning med "själv" -axel. Den hittar alltid bara en nod eftersom den representerar självelement.

Xpath = // * [@ type = 'password'] // self :: input

h) Ättling:

Väljer ättlingar till den aktuella noden som visas på skärmen nedan.

I nedanstående uttryck identifierar det alla elementets ättlingar till det aktuella elementet ('Main body surround' ramelement) vilket betyder nere under noden (barnnod, barnbarnsnod, etc.).

Xpath = // * [@ id = 'rt-funktion'] // ättling :: a

Det finns 12 "länk" -noder som matchar med "efterkommande" axel. Om du vill fokusera på ett visst element kan du använda nedanstående XPath:

Xpath = // * [@ id = 'rt-funktion'] // ättling :: a [1]

Du kan ändra XPath enligt kravet 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 de metoder som används för att hitta dynamiska element, som annars inte går att hitta med normal XPath-metod
  • XPath-uttryck väljer noder eller lista med noder på grundval av attribut som ID, namn, klassnamn, etc. från XML-dokumentet.