XPath in Selenium WebDriver-zelfstudie: hoe XPath te vinden?

Inhoudsopgave:

Anonim

Als in Selenium-automatisering de elementen niet worden gevonden door de algemene locators zoals id, klasse, naam, enz., Wordt XPath gebruikt om een ​​element op de webpagina te vinden.

In deze tutorial zullen we leren over de xpath en verschillende XPath-expressies om de complexe of dynamische elementen te vinden, waarvan de attributen dynamisch veranderen bij het vernieuwen of bij andere bewerkingen.

In deze XPath-zelfstudie leert u:

  • Wat is XPath?
  • Typen X-pad
    • Absoluut XPath
    • Relatieve XPath
  • Basis XPath
  • Bevat ()
  • OR & AND gebruiken
  • Begint met functie
  • Tekst()
  • XPath-assen methoden
    • Als vervolg op
    • Voorouder
    • Kind
    • Voorafgaand
    • Volgende broer of zus
    • Ouder
    • Zelf
    • Afstammeling

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

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

Basisformaat van XPath

Syntaxis voor XPath-selenium:

XPath bevat het pad van het element dat zich op de webpagina bevindt. Standaard XPath-syntaxis voor het maken van XPath is.

Xpath = // tagname [@ attribute = 'waarde']
  • Tagname: Tagname van het specifieke knooppunt.
  • Kenmerk: kenmerknaam van het knooppunt.
  • Waarde: waarde van het kenmerk.

Om het element op webpagina's nauwkeurig te vinden, zijn er verschillende soorten locators:

XPath-locators Vind verschillende elementen op de webpagina
ID kaart Om het element te vinden op ID van het element
Naam van de klasse Om het element te vinden op Classname 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 doorkruisen tussen verschillende elementen van de webpagina
CSS-pad CSS-pad lokaliseert ook elementen zonder naam, klasse of ID.

Typen 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, dat XPath mislukt.

Het belangrijkste kenmerk van XPath is dat het begint met de enkele schuine streep (/), wat betekent dat u het element uit het hoofdknooppunt kunt selecteren.

Hieronder ziet u het voorbeeld van een absolute xpath-uitdrukking van het element dat in het onderstaande scherm wordt weergegeven.

OPMERKING: u kunt de volgende XPath-oefening oefenen 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]

Absoluut XPath

Relatieve Xpath:

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

Hieronder ziet u het voorbeeld van een relatieve XPath-expressie van hetzelfde element, weergegeven in het onderstaande scherm. Dit is het algemene formaat dat wordt gebruikt om elementen te vinden door XPath.

Klik hier als de video niet toegankelijk is

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

Relatieve XPath

Wat zijn XPath-assen.

XPath-assen zoeken verschillende knooppunten in XML-document vanuit het huidige contextknooppunt. XPath-assen zijn de methoden die worden gebruikt om dynamische elementen te vinden, die anders niet mogelijk zijn door de normale XPath-methode zonder ID, Classname, Name, etc.

Axes-methoden worden gebruikt om die elementen te vinden die dynamisch veranderen bij vernieuwen of andere bewerkingen. Er zijn enkele assen-methoden die vaak worden gebruikt in Selenium Webdriver, zoals kind, ouder, voorouder, broer of zus, voorgaande, zelf, enz.

XPath gebruiken om complexe en dynamische elementen in Selenium af te handelen

1) Basis XPath:

XPath-expressie selecteert knooppunten of lijst met knooppunten op basis van attributen zoals ID, naam, klassenaam , enz. Uit het XML-document, zoals hieronder geïllustreerd.

Xpath = // input [@ name = 'uid']

Hier is een link om toegang te krijgen tot de pagina http://demo.guru99.com/test/selenium-xpath.html

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='//cdn.guru99.com/images/home/java.png.webp ']

2) Bevat ():

Contains () is een methode die wordt gebruikt in XPath-expressie. Het wordt gebruikt wanneer de waarde van een kenmerk 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 alleen een gedeeltelijke tekstwaarde van het attribuut te gebruiken. In de onderstaande XPath-uitdrukking wordt de gedeeltelijke waarde 'sub' gebruikt in plaats van de verzendknop. Het kan worden opgemerkt dat het element met succes is gevonden.

De volledige waarde van 'Type' is 'submit' maar gebruikt slechts een gedeeltelijke waarde 'sub'.

Xpath = // * [bevat (@ type, 'sub')] 

De volledige waarde van 'naam' is 'btnLogin' maar gebruikt slechts een gedeeltelijke waarde 'btn'.

Xpath = // * [bevat (@ naam, 'btn')]

In de bovenstaande uitdrukking hebben we de 'naam' als een attribuut en 'btn' als een gedeeltelijke waarde genomen, zoals weergegeven in de onderstaande schermafbeelding. Dit zal 2 elementen vinden (LOGIN & RESET) aangezien hun 'name'-attribuut begint met' btn '.

Evenzo hebben we in de onderstaande uitdrukking de 'id' als een attribuut en 'message' als een gedeeltelijke waarde genomen. Dit zal 2 elementen vinden ('Gebruikers-ID mag niet leeg zijn' & 'Wachtwoord mag niet leeg zijn') aangezien het 'naam'-attribuut begint met' bericht '.

Xpath = // * [bevat (@ id, 'bericht')] 

In de onderstaande uitdrukking hebben we de "tekst" van de link als een attribuut genomen en 'hier' als een gedeeltelijke waarde, zoals weergegeven in de onderstaande schermafbeelding. Dit zal de link ('hier') vinden aangezien het de tekst 'hier' weergeeft.

Xpath = // * [bevat (tekst (), 'hier')]Xpath = // * [bevat (@ href, 'guru99.com')] 

3) OR & AND 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 identificeert het de elementen waarvan de enkele of beide voorwaarden waar zijn.

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

Beide elementen markeren als "LOGIN" -element met attribuut 'type' en "RESET" -element met attribuut 'naam'.

In EN-expressie worden twee voorwaarden gebruikt, beide voorwaarden moeten waar zijn om het element te vinden. Het kan het element niet vinden als een voorwaarde onwaar is.

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

Markeer in onderstaande uitdrukking het element 'LOGIN' omdat het zowel het kenmerk 'type' als 'naam' heeft.

4) Xpath begint met

XPath starts-with () is een functie die wordt gebruikt om het webelement te vinden waarvan de attribuutwaarde wordt gewijzigd bij het vernieuwen 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 (geen wijzigingen).

Bijvoorbeeld -: Stel dat de ID van een bepaald element dynamisch verandert, zoals:

Id = "message12"

Id = "message345"

Id = "message8769"

enzovoort ... maar de oorspronkelijke tekst is hetzelfde. In dit geval gebruiken we Start-met-expressie.

In de onderstaande uitdrukking 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 die elementen waarvan de 'ID' begint met 'message'.

Xpath = // label [begint met (@ id, 'bericht')]

5) XPath Text () Functie

De XPath text () functie is een ingebouwde functie van selenium webdriver die wordt gebruikt om elementen te lokaliseren op basis van tekst van een webelement. Het helpt om de exacte tekstelementen te vinden en het 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 getoond. In ons geval vinden we het element met de tekst "UserID".

Xpath = // td [text () = 'UserID'] 

6) XPath-assenmethoden:

Deze methoden van XPath-assen 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 bank-demosite gebruiken.

a) Volgende:

Selecteert alle elementen in het document van de huidige node () [UserID input box is the current node] zoals getoond in het onderstaande scherm.

Xpath = // * [@ type = 'text'] // volgende :: invoer

Er zijn 3 "input" nodes die overeenkomen door "volgende" as-wachtwoord, login en reset-knop te gebruiken. Als u zich op een bepaald element wilt concentreren, kunt u de onderstaande XPath-methode gebruiken:

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

U kunt de XPath naar behoefte wijzigen door [1], [2]

… enzovoort.

Met de invoer als '1', vindt de onderstaande schermafbeelding het specifieke knooppunt dat het invoervakelement 'Wachtwoord' is.

b) Voorouder:

De voorouderas selecteert alle voorouderelementen (grootouder, ouder, enz.) Van het huidige knooppunt, zoals weergegeven in het onderstaande scherm.

In de onderstaande uitdrukking vinden we het voorouderelement van het huidige knooppunt ("ENTERPRISE TESTING" -knooppunt).

Xpath = // * [text () = 'Enterprise Testing'] // voorouder :: 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 de onderstaande XPath gebruiken, waar u het nummer 1, 2 wijzigt volgens uw vereisten:

Xpath = // * [text () = 'Enterprise Testing'] // voorouder :: div [1]

U kunt de XPath naar behoefte wijzigen door [1], [2]

… enzovoort.

c) Kind:

Selecteert alle onderliggende elementen van het huidige knooppunt (Java) zoals weergegeven in het onderstaande scherm.

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

Er zijn 71 "li" -knooppunten die overeenkomen door de "kind" -as te gebruiken. Als je je op een bepaald element wilt concentreren, kun je het onderstaande xpath gebruiken:

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

U kunt het xpath naar behoefte wijzigen door [1], [2]

… enzovoort.

d) Voorafgaand aan:

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 "LOGIN" -knop die Userid en wachtwoordinvoerelement is.

Xpath = // * [@ type = 'submit'] // voorafgaand aan :: input

Er zijn 2 "input" nodes die overeenkomen door de "voorgaande" as te gebruiken. Als je je op een bepaald element wilt concentreren, kun je de onderstaande XPath gebruiken:

Xpath = // * [@ type = 'submit'] // voorafgaand aan :: input [1]

U kunt het xpath naar behoefte wijzigen door [1], [2]

… enzovoort.

e) Volgende broer of zus:

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

 xpath = // * [@ type = 'submit'] // volgende-broer of zus :: invoer

Een input nodes matchen door gebruik te maken van de "volgende broer / zus" as.

f) Ouder:

Selecteert de ouder van het huidige knooppunt zoals weergegeven in het onderstaande scherm.

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

Er zijn 65 "div" -knooppunten die overeenkomen met behulp van de "bovenliggende" as. Als je je op een bepaald element wilt concentreren, kun je de onderstaande XPath gebruiken:

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

U kunt de XPath naar behoefte wijzigen door [1], [2]

… enzovoort.

g) Zelf:

Selecteert het huidige knooppunt of 'zelf' betekent dat het het knooppunt zelf aangeeft zoals weergegeven in het onderstaande scherm.

Een node-matching door de "zelf" -as te gebruiken. Het vindt altijd maar één knooppunt omdat het het zelfelement vertegenwoordigt.

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

h) Nakomelingen:

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'] // afstammeling :: a

Er zijn 12 "link" -knooppunten die overeenkomen met behulp van de "afstammende" as. Als je je op een bepaald element wilt concentreren, kun je de onderstaande XPath gebruiken:

Xpath = // * [@ id = 'rt-feature'] // afstammeling :: a [1]

U kunt de XPath naar behoefte wijzigen door [1], [2]

… enzovoort.

Overzicht:

XPath is vereist om een ​​element op de webpagina te vinden om een ​​bewerking op dat specifieke element uit te voeren.

  • Er zijn twee soorten selenium XPath:
    • Absoluut XPath
    • Relatieve XPath
  • XPath-assen zijn de methoden die worden gebruikt om dynamische elementen te vinden die anders niet kunnen worden gevonden met de normale XPath-methode
  • XPath-expressie selecteert knooppunten of lijst met knooppunten op basis van attributen zoals ID, naam, klassenaam, enz. Uit het XML-document.