XPath in Selenium: hoe zoeken en schrijven? (Tekst, Bevat, EN)

Wat is 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.

Als in Selenium-automatisering 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 leren we over de Xpath en verschillende XPath-expressies om de complex of dynamische elementen, waarvan de attributen dynamisch veranderen bij vernieuwing of bij elke bewerking.

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']

Het basisformaat van XPath in selenium wordt hieronder uitgelegd met een schermafdruk.

XPath-syntaxis
Basisformaat van XPath
  • // : 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 het volgende oefenenwing XPath-oefening hierover 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]

Absoluut XPath

Absoluut XPath

Relatieve Xpath

Relatieve Xpath begint vanuit het midden van de HTML DOM-structuur. Het begint met double schuine streep naar voren (//). Het kan overal op de webpagina naar elementen zoeken, wat betekent dat u geen lang xpath hoeft te schrijven en dat u vanuit het midden van de HTML DOM-structuur kunt beginnen. Relatieve Xpath heeft altijd de voorkeur, omdat het geen volledig pad vanaf het hoofdelement is.

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]

Relatief XPath

Relatief XPath

Wat zijn XPath-assen.

XPath-assen doorzoeken verschillende knooppunten in het XML-document vanaf het huidige contextknooppunt. XPath-assen zijn de methoden die worden gebruikt om dynamische elementen te vinden, welke anderewise niet mogelijk bij de normale XPath-methode zonder ID, Classname, Name, etc.

Axes-methoden worden gebruikt om die elementen te vinden die dynamisch veranderen bij vernieuwing of andere bewerkingen. Er zijn weinig assenmethoden die vaak worden gebruikt Selenium-webstuurprogramma zoals kind, ouder, voorouder, broer of zus, voorafgaande, zelf, enz.

Hoe dynamische XPath te schrijven in 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

Basis XPath

Basis XPath

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'.

Bevat()

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')]

Bevat()

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')]

Bevat()

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'.

Met OF & EN

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.

Met OF & EN

4) Xpath begint met

XPath begint met() is een functie die wordt gebruikt voor het vinden van het webelement waarvan de attribuutwaarde wordt gewijzigd bij vernieuwing of door andere dynamische bewerkingen op de webpagina. Bij deze methode wordt de begintekst van het attribuut gematcht om het element te vinden waarvan de attribuutwaarde dynamisch verandert. Je 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')]

Xpath begint met

5) XPath-tekst()-functie

Het 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 bij het vinden van de exacte tekstelementen en lokaliseert de elementen binnen de set tekstknooppunten. De te lokaliseren elementen 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-tekst()-functie

XPath-assenmethoden

Deze XPath-assenmethoden worden gebruikt om de complex of dynamische elementen. Hieronder zullen we enkele van deze methoden zien.

Om deze XPath-assenmethode te illustreren, zullen we de Guru99-bankdemosite gebruiken.

1) Volgwing

Selecteert alle elementen in het document van het huidige knooppunt( ) [Gebruikers-ID invoer box is het huidige knooppunt] zoals weergegeven in het onderstaande scherm.

Xpath=//*[@type='text']//following::input

Following

Er zijn 3 “invoer”-knooppunten die overeenkomen met behulp van “following” as-wachtwoord, login en reset-knop. Als u zich op een bepaald element wilt concentreren, 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 'Wachtwoord'-invoer is box element.

Following

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

Voorvader

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

Kind

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

voorafgaand

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) Volgwing-broer of zus

Selecteer het volgendewing broers en zussen van het contextknooppunt. Broers en zussen bevinden zich op hetzelfde niveau van het huidige knooppunt, zoals weergegeven in het onderstaande scherm. Het zal het element na het huidige knooppunt vinden.

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

Following-broer of zus

Eén invoerknooppunt komt overeen met behulp van “following-broer of zus” as.

6) Ouder

Selecteert het bovenliggende knooppunt van het huidige knooppunt, zoals weergegeven in het onderstaande scherm.

Xpath=//*[@id='rt-feature']//parent::div

Ouder

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.

Zelf

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

Afstammeling

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.

Samengevat

XPath is vereist om een ​​element op de webpagina te vinden en 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, welke anderewise niet mogelijk te vinden met de normale XPath-methode
  • 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-zelfstudie voor beginners: leer WebDriver in 7 dagen