XPath in Selenium: Hoe zoeken en schrijven? (Tekst, Bevat, EN)
Waar zit XPath in? Selenium?
XPath in Selenium is een XML-pad dat wordt gebruikt voor navigatie door de HTML-structuur van de pagina. Het is een syntaxis of taal voor het vinden van elk element op een webpagina met behulp van XML-padexpressie. XPath kan worden gebruikt voor zowel HTML- als XML-documenten om de locatie van elk element op een webpagina te vinden met behulp van de HTML DOM-structuur.
In Selenium automatisering: als de elementen niet worden gevonden door de algemene locators zoals id, class, name, etc., wordt XPath gebruikt om een element op de webpagina te vinden.
In deze tutorial maken we kennis met Xpath en verschillende XPath-expressies om complexe of dynamische elementen te vinden, waarvan de kenmerken dynamisch veranderen bij vernieuwing of andere bewerkingen.
XPath-syntaxis
XPath bevat het pad van het element op de webpagina. De standaard XPath-syntaxis voor het maken van XPath is.
Xpath=//tagname[@attribute='value']
Hieronder wordt de basisopmaak van XPath in Selenium uitgelegd met een schermafbeelding.
- // : Selecteer huidig knooppunt.
- Tagnaam: Tagnaam van het specifieke knooppunt.
- @: Selecteer attribuut.
- Attribuut: Kenmerknaam van het knooppunt.
- Waarde: Waarde van het attribuut.
Om het element op webpagina's nauwkeurig te vinden, zijn er verschillende soorten locators:
XPath-locators | Vind verschillende elementen op de webpagina |
---|---|
ID | Om het element te vinden op basis van de ID van het element |
Naam van de klasse | Om het element te vinden op klassenaam van het element |
Naam | Om het element te vinden op naam van het element |
verbind tekst | Om het element te vinden op de tekst van de link |
XPath | XPath vereist voor het vinden van het dynamische element en het navigeren tussen verschillende elementen van de webpagina |
CSS-pad | Het CSS-pad lokaliseert ook elementen zonder naam, klasse of ID. |
Soorten X-pad
Er zijn twee soorten XPath:
1) Absoluut XPath
2) Relatieve XPath
Absoluut XPath
Het is de directe manier om het element te vinden, maar het nadeel van het absolute XPath is dat als er wijzigingen worden aangebracht in het pad van het element, XPath mislukt.
Het belangrijkste kenmerk van XPath is dat het begint met de enkele slash(/) , wat betekent dat u het element vanaf het hoofdknooppunt kunt selecteren.
Hieronder ziet u het voorbeeld van een absolute Xpath-expressie van het element dat in het onderstaande scherm wordt weergegeven.
OPMERKING: U kunt de volgende XPath-oefening op deze http://demo.guru99.com/test/selenium-xpath.html
Klik hier als de video niet toegankelijk is
Absoluut 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]
Relatieve Xpath
Relatieve Xpath begint in het midden van de HTML DOM-structuur. Het begint met een dubbele forward slash (//). Het kan overal op de webpagina elementen zoeken, wat betekent dat u geen lange xpath hoeft te schrijven en u kunt beginnen in het midden van de HTML DOM-structuur. Relatieve Xpath heeft altijd de voorkeur omdat het geen compleet pad is vanaf het root-element.
Hieronder ziet u het voorbeeld van een relatieve XPath-expressie van hetzelfde element dat in het onderstaande scherm wordt weergegeven. Dit is het gebruikelijke formaat dat door XPath wordt gebruikt om elementen te vinden.
Klik hier als de video niet toegankelijk is
Relative XPath: //div[@class='featured-box cloumnsize1']//h4[1]//b[1]
Wat zijn XPath-assen.
XPath-assen zoeken naar verschillende knooppunten in XML-documenten vanaf het huidige contextknooppunt. XPath-assen zijn de methoden die worden gebruikt om dynamische elementen te vinden, die anders niet mogelijk zijn met een normale XPath-methode zonder ID, Classname, Name, etc.
Axes-methoden worden gebruikt om die elementen te vinden die dynamisch veranderen bij refresh of andere bewerkingen. Er zijn weinig assen-methoden die algemeen worden gebruikt in Selenium Webstuurprogramma zoals kind, ouder, voorouder, broer of zus, voorafgaande, zelf, enz.
Hoe dynamische XPath in te schrijven Selenium webdriver
1) Basis XPath
XPath-expressie selecteert knooppunten of een lijst met knooppunten op basis van attributen zoals ID, naam, klasnaam, enz. uit het XML-document, zoals hieronder geïllustreerd.
Xpath=//input[@name='uid']
Hier is een link om naar de pagina te gaan http://demo.guru99.com/test/selenium-xpath.html
Enkele meer basale xpath-expressies:
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='//guru99.com/images/home/java.png']
2) Bevat()
Bevat() is een methode die wordt gebruikt in de XPath-expressie. Het wordt gebruikt wanneer de waarde van een attribuut dynamisch verandert, bijvoorbeeld inloggegevens.
De contain-functie heeft de mogelijkheid om het element met gedeeltelijke tekst te vinden, zoals weergegeven in het onderstaande XPath-voorbeeld.
In dit voorbeeld hebben we geprobeerd het element te identificeren door slechts een gedeeltelijke tekstwaarde van het attribuut te gebruiken. In de onderstaande XPath-expressie wordt de gedeeltelijke waarde 'sub' gebruikt in plaats van de verzendknop. Er kan worden waargenomen dat het element met succes is gevonden.
De volledige waarde van 'Type' is 'submit', maar er wordt slechts een gedeeltelijke waarde 'sub' gebruikt.
Xpath=//*[contains(@type,'sub')]
De volledige waarde van 'name' is 'btnLogin' maar gebruikt slechts een gedeeltelijke waarde 'btn'.
Xpath=//*[contains(@name,'btn')]
In de bovenstaande expressie hebben we de 'name' als attribuut en 'btn' als gedeeltelijke waarde genomen, zoals weergegeven in de onderstaande schermafbeelding. Dit zal 2 elementen vinden (LOGIN & RESET) omdat hun 'name' attribuut begint met 'btn'.
Op dezelfde manier hebben we in de onderstaande uitdrukking de 'id' als attribuut en 'bericht' als gedeeltelijke waarde genomen. Dit zal twee elementen vinden ('Gebruikers-ID mag niet leeg zijn' en 'Wachtwoord mag niet leeg zijn') omdat het 'id'-attribuut begint met 'bericht'.
Xpath=//*[contains(@id,'message')]
In de onderstaande uitdrukking hebben we de 'tekst' van de link als attribuut en 'hier' als gedeeltelijke waarde genomen, zoals weergegeven in de onderstaande schermafbeelding. Hierdoor wordt de link ('hier') gevonden, omdat de tekst 'hier' wordt weergegeven.
Xpath=//*[contains(text(),'here')]
Xpath=//*[contains(@href,'guru99.com')]
3) OF & EN gebruiken
In de OR-expressie worden twee voorwaarden gebruikt, of de eerste voorwaarde OF de tweede voorwaarde waar moet zijn. Het is ook van toepassing als een van de voorwaarden waar is of misschien beide. Betekent dat elke voorwaarde waar moet zijn om het element te vinden.
In de onderstaande XPath-expressie worden de elementen geïdentificeerd waarvan de enkele of beide voorwaarden waar zijn.
Xpath=//*[@type='submit' or @name='btnReset']
Markeer beide elementen als het “LOGIN”-element met attribuut 'type' en het “RESET”-element met attribuut 'naam'.
In de EN-expressie worden twee voorwaarden gebruikt; beide voorwaarden moeten waar zijn om het element te vinden. Er wordt geen element gevonden als een van de voorwaarden onwaar is.
Xpath=//input[@type='submit' and @name='btnLogin']
In de onderstaande expressie wordt het 'LOGIN'-element gemarkeerd omdat het zowel het attribuut 'type' als 'naam' heeft.
4) Xpath begint met
XPath begint met() is een functie die wordt gebruikt om het webelement te vinden waarvan de attribuutwaarde wordt gewijzigd bij refresh of door andere dynamische bewerkingen op de webpagina. Bij deze methode wordt de begintekst van het attribuut vergeleken om het element te vinden waarvan de attribuutwaarde dynamisch verandert. U kunt ook elementen vinden waarvan de attribuutwaarde statisch is (niet verandert).
Bijvoorbeeld -: Stel dat de ID van een bepaald element dynamisch verandert, zoals:
Id=” bericht12″
Id=” bericht345″
Id=” bericht8769″
enzovoort... maar de oorspronkelijke tekst is hetzelfde. In dit geval gebruiken we de Start-with-expressie.
In de onderstaande expressie zijn er twee elementen met een id die begint met 'bericht' (dwz 'Gebruikers-ID mag niet leeg zijn' en 'Wachtwoord mag niet leeg zijn'). In het onderstaande voorbeeld vindt XPath de elementen waarvan de 'ID' begint met 'bericht'.
Xpath=//label[starts-with(@id,'message')]
5) XPath-tekst()-functie
De XPath-tekst()-functie is een ingebouwde functie van selenium webdriver die wordt gebruikt om elementen te lokaliseren op basis van de tekst van een webelement. Het helpt om de exacte tekstelementen te vinden en het lokaliseert de elementen binnen de set tekstknooppunten. De elementen die moeten worden gelokaliseerd, moeten in stringvorm zijn.
In deze uitdrukking, met tekstfunctie, vinden we het element met exacte tekstovereenkomst, zoals hieronder weergegeven. In ons geval vinden we het element met de tekst “UserID”.
Xpath=//td[text()='UserID']
XPath-assenmethoden
Deze XPath-assenmethoden worden gebruikt om de complexe of dynamische elementen te vinden. Hieronder zullen we enkele van deze methoden zien.
Om deze XPath-assenmethode te illustreren, zullen we de Guru99-bankdemosite gebruiken.
1) Volgend
Selecteert alle elementen in het document van het huidige knooppunt ( ) [ Het invoerveld UserID is het huidige knooppunt] zoals weergegeven in het onderstaande scherm.
Xpath=//*[@type='text']//following::input
Er zijn 3 "input" nodes die matchen door "following" axis te gebruiken: wachtwoord, login en resetknop. Als u zich op een bepaald element wilt richten, kunt u de onderstaande XPath-methode gebruiken:
Xpath=//*[@type='text']//following::input[1]
U kunt de XPath volgens de vereisten wijzigen door [1],[2]…………enzovoorts in te voeren.
Met de invoer als '1' vindt de onderstaande schermafbeelding het specifieke knooppunt dat het invoerveldelement 'Wachtwoord' is.
2) Voorouder
De voorouderas selecteert alle voorouderselementen (grootouder, ouder, enz.) van het huidige knooppunt, zoals weergegeven in het onderstaande scherm.
In de onderstaande uitdrukking vinden we het voorouderselement van het huidige knooppunt ("ENTERPRISE TESTING" knooppunt).
Xpath=//*[text()='Enterprise Testing']//ancestor::div
Er zijn 13 “div”-knooppunten die overeenkomen met behulp van de “voorouder”-as. Als u zich op een bepaald element wilt concentreren, kunt u het onderstaande XPath gebruiken, waarbij u het getal 1, 2 naar wens wijzigt:
Xpath=//*[text()='Enterprise Testing']//ancestor::div[1]
U kunt de XPath volgens de vereiste wijzigen door [1], [2]………… enzovoort in te voeren.
3) Kind
Selecteert alle onderliggende elementen van het huidige knooppunt (Java) zoals weergegeven in het onderstaande scherm.
Xpath=//*[@id='java_technologies']//child::li
Er zijn 71 ‘li’-knooppunten die overeenkomen met behulp van de ‘kind’-as. Als u zich op een bepaald element wilt concentreren, kunt u het onderstaande xpath gebruiken:
Xpath=//*[@id='java_technologies']//child::li[1]
U kunt het xpath volgens de vereisten wijzigen door [1],[2]…………enzovoorts in te voeren.
4) Voorafgaand
Selecteer alle knooppunten die vóór het huidige knooppunt komen, zoals weergegeven in het onderstaande scherm.
In de onderstaande uitdrukking identificeert het alle invoerelementen vóór de knop “LOGIN”. Gebruikersnaam en wachtwoord invoerelement.
Xpath=//*[@type='submit']//preceding::input
Er zijn 2 “invoer”-knooppunten die overeenkomen met behulp van de “voorgaande” as. Als u zich op een bepaald element wilt concentreren, kunt u het onderstaande XPath gebruiken:
Xpath=//*[@type='submit']//preceding::input[1]
U kunt het xpath volgens de vereisten wijzigen door [1],[2]…………enzovoorts in te voeren.
5) Volgend broertje of zusje
Selecteer de volgende 'siblings' van de contextnode. Siblings bevinden zich op hetzelfde niveau als de huidige node, zoals weergegeven in het onderstaande scherm. Het vindt het element na de huidige node.
xpath=//*[@type='submit']//following-sibling::input
Eén invoerknooppunt dat overeenkomt met behulp van de “volgende-broer/zus”-as.
6) Ouder
Selecteert het bovenliggende knooppunt van het huidige knooppunt, zoals weergegeven in het onderstaande scherm.
Xpath=//*[@id='rt-feature']//parent::div
Er zijn 65 “div”-knooppunten die overeenkomen met behulp van de “ouder”-as. Als u zich op een bepaald element wilt concentreren, kunt u het onderstaande XPath gebruiken:
Xpath=//*[@id='rt-feature']//parent::div[1]
U kunt de XPath volgens de vereisten wijzigen door [1],[2]…………enzovoorts in te voeren.
7) Zelf
Selecteert het huidige knooppunt of 'zelf' betekent dat het het knooppunt zelf aangeeft, zoals weergegeven in het onderstaande scherm.
Eén knooppunt komt overeen met behulp van de “zelf”-as. Het vindt altijd slechts één knooppunt omdat het een zelfelement vertegenwoordigt.
Xpath =//*[@type='password']//self::input
8) Afstammeling
Selecteert de afstammelingen van het huidige knooppunt, zoals weergegeven in het onderstaande scherm.
In de onderstaande uitdrukking identificeert het alle elementen die afstammen van het huidige element (frame-element 'Main body surround'), wat betekent beneden onder het knooppunt (kindknooppunt, kleinkindknooppunt, enz.).
Xpath=//*[@id='rt-feature']//descendant::a
Er zijn 12 “link”-knooppunten die overeenkomen met behulp van de “descendant”-as. Als u zich op een bepaald element wilt concentreren, kunt u het onderstaande XPath gebruiken:
Xpath=//*[@id='rt-feature']//descendant::a[1]
U kunt de XPath volgens de vereisten wijzigen door [1],[2]…………enzovoorts in te voeren.
Samenvatting
XPath is nodig om een element op de webpagina te vinden en vervolgens een bewerking op dat specifieke element uit te voeren.
- Er zijn twee soorten selenium XPath:
- Absoluut XPath
- Relatief XPath
- XPath-assen zijn de methoden die worden gebruikt om dynamische elementen te vinden die anders niet met de normale XPath-methode kunnen worden gevonden.
- XPath-expressie selecteert knooppunten of een lijst met knooppunten op basis van attributen zoals ID , Name, Classname, enz. uit het XML-document.
Controleer ook: - Selenium Tutorial voor beginners: leer WebDriver in 7 dagen