XPath in Selenium: Zelfstudie

XPath in Selenium

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 gevonden kunnen worden door de algemene locators zoals id, klasse, naam, etc. dan 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.

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 de volgende XPath-oefening op deze https://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 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]

Relatief XPath
Relatief XPath

Wat zijn XPath-assen?

XPath-assen zoeken naar verschillende knooppunten in een XML-document vanuit 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, klassenaam, naam, enz. XPath in Selenium bevat verschillende methoden, zoals Bevat, EN, Absolute XPath en Relatieve XPath, om dynamische elementen te identificeren en lokaliseren op basis van verschillende kenmerken en voorwaarden.

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 https://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='https://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, zoals het โ€œLOGINโ€-element met het kenmerk 'type' en het โ€œRESETโ€-element met het kenmerk '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 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')]

Xpath begint met

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-tekst()-functie

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 gebruikmaken van de GuruDemosite van 99 Bank.

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

volgend

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.

volgend

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

Volgend broertje of zusje

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

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.

Veelgestelde vragen

XPath (XML Path Language) wordt gebruikt om door elementen en attributen in een XML of HTML-document. Het helpt bij het identificeren en ophalen van specifieke knooppunten, waardoor het essentieel is in webscraping.ping, XML-gegevensverwerking en geautomatiseerde testtools zoals Selenium voor het lokaliseren van webelementen.

Gebruik XPath wanneer u complexe of dynamisch veranderende webelementen moet lokaliseren die niet eenvoudig te identificeren zijn met behulp van eenvoudigere locators zoals ID of klassenaam. Het is ideaal voor het navigeren door hiรซrarchische structuren, het selecteren van knooppunten op basis van kenmerken en het verwerken van elementen zonder unieke identificatiegegevens.

Locators in XPath zijn expressies die worden gebruikt om elementen binnen de structuur van een document te identificeren. Ze specificeren paden naar knooppunten met behulp van kenmerken, tekst, hiรซrarchie of positie. Veelgebruikte locatorstrategieรซn zijn onder andere het selecteren van elementen op tagnaam, kenmerkwaarden, gedeeltelijke overeenkomsten of logische combinaties van voorwaarden.

XPath bestaat uit twee typen: Absoluut XPath en Relatieve XPath.

  • Absoluut XPath begint bij het hoofdknooppunt (bijv. /html/body/โ€ฆ) en geeft het volledige pad.
  • Relatief XPath begint vanaf elk knooppunt (bijv. //div[@id='content']) en is flexibeler en beter te onderhouden.

Een enkele slash (/) selecteert knooppunten direct onder het root- of huidige knooppunt en vertegenwoordigt een absoluut pad. Een dubbele slash (//) zoekt overal in het document naar knooppunten, ongeacht de hiรซrarchie, waardoor het flexibeler is om elementen te vinden zonder het volledige pad op te geven.

Ja, XPath is hoofdlettergevoelig. Elementnamen, attribuutnamen en waarden moeten exact overeenkomen met de manier waarop ze in het document voorkomen. Zo worden //div en //DIV verschillend behandeld. Om hoofdletterongevoeligheid te omzeilen, kunnen functies zoals translate() in XPath-expressies worden gebruikt.

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

Vat dit bericht samen met: