XPath dans Selenium: Didacticiel

XPath dans Selenium

Qu'est-ce que XPath dans Selenium?

XPath dans Selenium est un chemin XML utilisรฉ pour la navigation dans la structure HTML de la page. Il s'agit d'une syntaxe ou d'un langage permettant de rechercher n'importe quel รฉlรฉment sur une page Web ร  l'aide d'une expression de chemin XML. XPath peut รชtre utilisรฉ pour les documents HTML et XML pour trouver l'emplacement de n'importe quel รฉlรฉment sur une page Web ร  l'aide de la structure HTML DOM.

In Selenium En cas d'automatisation, si les รฉlรฉments ne sont pas trouvรฉs par les localisateurs gรฉnรฉraux tels que id, class, name, etc., XPath est utilisรฉ pour trouver un รฉlรฉment sur la page Web.

Dans ce didacticiel, nous dรฉcouvrirons XPath et diffรฉrentes expressions XPath pour trouver les รฉlรฉments complexes ou dynamiques, dont les attributs changent dynamiquement lors de l'actualisation ou de toute opรฉration.

Syntaxe XPath

XPath contient le chemin de l'รฉlรฉment situรฉ sur la page Web. La syntaxe XPath standard pour crรฉer XPath est la suivante.

Xpath=//tagname[@attribute='value']

Le format de base de XPath en sรฉlรฉnium est expliquรฉ ci-dessous avec une capture d'รฉcran.

Syntaxe XPath
Format de base de XPath
  • // : Sรฉlectionnez le nล“ud actuel.
  • Nom de l'รฉtiquette : Nom de variable du nล“ud particulier.
  • @: Sรฉlectionnez l'attribut.
  • Attribut: Nom d'attribut du nล“ud.
  • Valeur Relative (RV): Valeur de l'attribut.

Pour trouver l'รฉlรฉment avec prรฉcision sur les pages Web, il existe diffรฉrents types de localisateurs :

Localisateurs XPath Trouver diffรฉrents รฉlรฉments sur la page Web
ID Pour rechercher l'รฉlรฉment par ID de l'รฉlรฉment
Nom du cours Pour rechercher l'รฉlรฉment par nom de classe de l'รฉlรฉment
Nom Pour rechercher l'รฉlรฉment par le nom de l'รฉlรฉment
Texte de lien Pour trouver l'รฉlรฉment par texte du lien
XPath XPath requis pour trouver l'รฉlรฉment dynamique et parcourir entre les diffรฉrents รฉlรฉments de la page Web
Chemin CSS Le chemin CSS localise รฉgalement les รฉlรฉments sans nom, classe ou ID.

Types de chemin X

Il existe deux types de XPath :

1) XPath absolu

2) XPath relatif

XPath absolu

C'est le moyen direct de trouver l'รฉlรฉment, mais l'inconvรฉnient du XPath absolu est que si des modifications sont apportรฉes au chemin de l'รฉlรฉment, ce XPath รฉchoue.

La principale caractรฉristique de XPath est qu'il commence par une seule barre oblique (/), ce qui signifie que vous pouvez sรฉlectionner l'รฉlรฉment ร  partir du nล“ud racine.

Vous trouverez ci-dessous l'exemple d'une expression XPath absolue de l'รฉlรฉment affichรฉ dans l'รฉcran ci-dessous.

REMARQUE : Vous pouvez pratiquer l'exercice XPath suivant sur ce https://demo.guru99.com/test/selenium-xpath.html

Cliquez ร  nouveau ici si la vidรฉo n'est pas accessible

XPath absolu :

/html/body/div[2]/div[1]/div/h4[1]/b/html[1]/body[1]/div[2]/div[1]/div[1]/h4[1]/b[1]

XPath absolu
XPath absolu

Xpath relatif

Xpath relatif commence au milieu de la structure HTML DOM. Il commence par une double barre oblique (//). Il peut rechercher des รฉlรฉments n'importe oรน sur la page Web, ce qui signifie qu'il n'est pas nรฉcessaire d'รฉcrire un long XPath et que vous pouvez commencer au milieu de la structure HTML DOM. Le Xpath relatif est toujours prรฉfรฉrรฉ car il ne sโ€™agit pas dโ€™un chemin complet ร  partir de lโ€™รฉlรฉment racine.

Vous trouverez ci-dessous l'exemple d'une expression XPath relative du mรชme รฉlรฉment affichรฉ dans l'รฉcran ci-dessous. Il s'agit du format commun utilisรฉ pour rechercher un รฉlรฉment par XPath.

Cliquez ร  nouveau ici si la vidรฉo n'est pas accessible

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

XPath relatif
XPath relatif

Que sont les axes XPath ?

Les axes XPath recherchent diffรฉrents nล“uds dans un document XML ร  partir du nล“ud de contexte actuel. Ils permettent de trouver des รฉlรฉments dynamiques, ce qui est impossible avec une mรฉthode XPath classique, sans ID, nom de classe, nom, etc. Selenium inclut plusieurs mรฉthodes telles que Contient, ET, XPath absolu et XPath relatif pour identifier et localiser des รฉlรฉments dynamiques en fonction de divers attributs et conditions.

Les mรฉthodes Axes sont utilisรฉes pour rechercher les รฉlรฉments qui changent dynamiquement lors de l'actualisation ou de toute autre opรฉration. Il existe peu de mรฉthodes d'axes couramment utilisรฉes dans Selenium Pilote Web comme enfant, parent, ancรชtre, frรจre ou sล“ur, prรฉcรฉdent, soi, etc.

Comment รฉcrire du XPath dynamique dans Selenium pilote web

1) XPath de base

L'expression XPath sรฉlectionne les nล“uds ou la liste de nล“uds sur la base d'attributs tels que ID, nom, nom de classe, etc. ร  partir du document XML comme illustrรฉ ci-dessous.

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

Voici un lien pour accรฉder ร  la page https://demo.guru99.com/test/selenium-xpath.html

XPath de base
XPath de base

Quelques expressions XPath plus basiques :

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

Contains() est une mรฉthode utilisรฉe dans l'expression XPath. Il est utilisรฉ lorsque la valeur d'un attribut change de maniรจre dynamique, par exemple les informations de connexion.

La fonctionnalitรฉ Contenir a la capacitรฉ de trouver l'รฉlรฉment avec un texte partiel, comme indiquรฉ dans l'exemple XPath ci-dessous.

Dans cet exemple, nous avons essayรฉ d'identifier l'รฉlรฉment en utilisant simplement la valeur textuelle partielle de l'attribut. Dans l'expression XPath ci-dessous, la valeur partielle ยซ sub ยป est utilisรฉe ร  la place du bouton de soumission. On peut constater que l'รฉlรฉment est trouvรฉ avec succรจs.

La valeur complรจte de ยซ Type ยป est ยซ soumettre ยป, mais en utilisant uniquement la valeur partielle ยซ sous ยป.

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

La valeur complรจte de ยซ nom ยป est ยซ btnLogin ยป, mais en utilisant uniquement la valeur partielle ยซ btn ยป.

Xpath=//*[contains(@name,'btn')]

Dans l'expression ci-dessus, nous avons pris le ยซ nom ยป comme attribut et ยซ btn ยป comme valeur partielle, comme indiquรฉ dans la capture d'รฉcran ci-dessous. Cela trouvera 2 รฉlรฉments (LOGIN & RESET) car leur attribut 'name' commence par 'btn'.

Contient()

De mรชme, dans l'expression ci-dessous, nous avons pris ยซ id ยป comme attribut et ยซ message ยป comme valeur partielle. Cela trouvera 2 รฉlรฉments (ยซ L'ID utilisateur ne doit pas รชtre vide ยป et ยซ Le mot de passe ne doit pas รชtre vide ยป) car son attribut ยซ id ยป commence par ยซ message ยป.

Xpath=//*[contains(@id,'message')]

Contient()

Dans l'expression ci-dessous, nous avons pris le ยซ texte ยป du lien comme attribut et ยซ ici ยป comme valeur partielle, comme indiquรฉ dans la capture d'รฉcran ci-dessous. Cela trouvera le lien (ยซ ici ยป) car il affichera le texte ยซ ici ยป.

Xpath=//*[contains(text(),'here')]
Xpath=//*[contains(@href,'guru99.com')]

Contient()

3) Utiliser OU & โ€‹โ€‹ET

Dans l'expression OR, deux conditions sont utilisรฉes, que la 1รจre condition OU la 2รจme condition soit vraie. Cela sโ€™applique รฉgalement si une condition est vraie ou peut-รชtre les deux. Signifie que nโ€™importe quelle condition doit รชtre vraie pour trouver lโ€™รฉlรฉment.

Dans l'expression XPath ci-dessous, il identifie les รฉlรฉments dont une ou les deux conditions sont vraies.

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

Mise en รฉvidence des deux รฉlรฉments : lโ€™รฉlรฉment ยซ LOGIN ยป ayant lโ€™attribut ยซ type ยป et lโ€™รฉlรฉment ยซ RESET ยป ayant lโ€™attribut ยซ name ยป.

Utiliser OU & โ€‹โ€‹ET

Dans l'expression AND, deux conditions sont utilisรฉes, les deux conditions doivent รชtre vraies pour trouver l'รฉlรฉment. Il ne parvient pas ร  trouver un รฉlรฉment si une condition est fausse.

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

Dans l'expression ci-dessous, mettez en surbrillance l'รฉlรฉment ยซ LOGIN ยป car il possรจde ร  la fois les attributs ยซ type ยป et ยซ nom ยป.

Utiliser OU & โ€‹โ€‹ET

4) XPath commence par

XPath commence par() est une fonction utilisรฉe pour rechercher l'รฉlรฉment Web dont la valeur d'attribut est modifiรฉe lors de l'actualisation ou par d'autres opรฉrations dynamiques sur la page Web. Dans cette mรฉthode, le texte de dรฉpart de l'attribut est mis en correspondance pour trouver l'รฉlรฉment dont la valeur d'attribut change dynamiquement. Vous pouvez รฉgalement rechercher des รฉlรฉments dont la valeur d'attribut est statique (et non modifiรฉe).

Par exemple - : Supposons que l'ID d'un รฉlรฉment particulier change dynamiquement comme :

Id=โ€message12โ€ณ

Id=โ€message345โ€ณ

Id=โ€message8769โ€ณ

et ainsi de suite... mais le texte initial est le mรชme. Dans ce cas, nous utilisons l'expression Start-with.

Dans l'expression ci-dessous, il y a deux รฉlรฉments avec un identifiant commenรงant par ยซ message ยป (c'est-ร -dire ยซ L'ID utilisateur ne doit pas รชtre vide ยป et ยซ Le mot de passe ne doit pas รชtre vide ยป). Dans l'exemple ci-dessous, XPath trouve les รฉlรฉments dont ยซ ID ยป commence par ยซ message ยป.

Xpath=//label[starts-with(@id,'message')]

XPath commence avec

5) Fonction XPath Text()

Le Fonction XPath text() est une fonction intรฉgrรฉe de Selenium Webdriver qui est utilisรฉe pour localiser des รฉlรฉments en fonction du texte d'un รฉlรฉment Web. Il aide ร  trouver les รฉlรฉments de texte exacts et ร  localiser les รฉlรฉments dans l'ensemble de nล“uds de texte. Les รฉlรฉments ร  localiser doivent รชtre sous forme de chaรฎne.

Dans cette expression, avec la fonction texte, nous trouvons l'รฉlรฉment avec une correspondance exacte du texte, comme indiquรฉ ci-dessous. Dans notre cas, nous trouvons l'รฉlรฉment avec le texte ยซ UserID ยป.

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

Fonction XPath Text()

Mรฉthodes des axes XPath

Ces mรฉthodes d'axes XPath sont utilisรฉes pour rechercher les รฉlรฉments complexes ou dynamiques. Ci-dessous, nous verrons certaines de ces mรฉthodes.

Pour illustrer ces axes XPath, nous utiliseronsโ€ฆ GuruSite de dรฉmonstration de 99 Bank.

1) Suite

Sรฉlectionne tous les รฉlรฉments du document du nล“ud actuel ( ) [la zone de saisie UserID est le nล“ud actuel] comme indiquรฉ dans l'รฉcran ci-dessous.

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

Abonnements

Il y a 3 nล“uds ยซ d'entrรฉe ยป correspondant en utilisant l'axe ยซ suivant ยป : mot de passe, connexion et bouton de rรฉinitialisation. Si vous souhaitez vous concentrer sur un รฉlรฉment particulier, vous pouvez utiliser la mรฉthode XPath ci-dessous :

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

Vous pouvez modifier le XPath selon les besoins en mettant [1],[2]โ€ฆโ€ฆโ€ฆโ€ฆet ainsi de suite.

Avec l'entrรฉe ยซ 1 ยป, la capture d'รฉcran ci-dessous trouve le nล“ud particulier qui est l'รฉlรฉment de la zone de saisie ยซ Mot de passe ยป.

Abonnements

2) Ancรชtre

L'axe des ancรชtres sรฉlectionne tous les รฉlรฉments ancรชtres (grands-parents, parents, etc.) du nล“ud actuel, comme indiquรฉ dans l'รฉcran ci-dessous.

Dans l'expression ci-dessous, nous trouvons l'รฉlรฉment ancรชtres du nล“ud actuel (nล“ud ยซ ENTERPRISE TESTING ยป).

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

Ancรชtre

Il y a 13 nล“uds ยซ div ยป correspondant en utilisant l'axe ยซ ancรชtre ยป. Si vous souhaitez vous concentrer sur un รฉlรฉment particulier, vous pouvez utiliser le XPath ci-dessous, oรน vous modifiez le numรฉro 1, 2 selon vos besoins :

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

Vous pouvez modifier le XPath selon les besoins en mettant [1], [2]โ€ฆโ€ฆโ€ฆโ€ฆet ainsi de suite.

3) Enfant

Sรฉlectionne tous les รฉlรฉments enfants du nล“ud actuel (Java) comme indiquรฉ dans lโ€™รฉcran ci-dessous.

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

Enfant

Il y a 71 nล“uds ยซ li ยป correspondant en utilisant l'axe ยซ enfant ยป. Si vous souhaitez vous concentrer sur un รฉlรฉment particulier, vous pouvez utiliser le XPath ci-dessous :

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

Vous pouvez modifier le XPath selon les besoins en mettant [1],[2]โ€ฆโ€ฆโ€ฆโ€ฆet ainsi de suite.

4) Prรฉcรฉdent

Sรฉlectionnez tous les nล“uds qui prรฉcรจdent le nล“ud actuel, comme indiquรฉ dans l'รฉcran ci-dessous.

Dans l'expression ci-dessous, il identifie tous les รฉlรฉments d'entrรฉe avant le bouton ยซ CONNEXION ยป qui est Identifiant d'utilisateur et รฉlรฉment d'entrรฉe.

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

Prรฉcรฉdent

Il y a 2 nล“uds ยซ d'entrรฉe ยป correspondant en utilisant l'axe ยซ prรฉcรฉdent ยป. Si vous souhaitez vous concentrer sur un รฉlรฉment particulier, vous pouvez utiliser le XPath ci-dessous :

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

Vous pouvez modifier le XPath selon les besoins en mettant [1],[2]โ€ฆโ€ฆโ€ฆโ€ฆet ainsi de suite.

5) Frรจre ou sล“ur suivant

Sรฉlectionnez les frรจres et sล“urs suivants du nล“ud contextuel. Les frรจres et sล“urs sont au mรชme niveau du nล“ud actuel, comme indiquรฉ dans l'รฉcran ci-dessous. Il trouvera l'รฉlรฉment aprรจs le nล“ud actuel.

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

Frรจre ou sล“ur suivant

Un nล“ud d'entrรฉe correspondant en utilisant l'axe ยซ frรจre suivant ยป.

6) Parents

Sรฉlectionne le parent du nล“ud actuel comme indiquรฉ dans l'รฉcran ci-dessous.

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

Parent

Il y a 65 nล“uds ยซ div ยป correspondant en utilisant l'axe ยซ parent ยป. Si vous souhaitez vous concentrer sur un รฉlรฉment particulier, vous pouvez utiliser le XPath ci-dessous :

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

Vous pouvez modifier le XPath selon les besoins en mettant [1],[2]โ€ฆโ€ฆโ€ฆโ€ฆet ainsi de suite.

7) Soi

Sรฉlectionne le nล“ud actuel ou ยซ soi ยป signifie qu'il indique le nล“ud lui-mรชme comme indiquรฉ dans l'รฉcran ci-dessous.

Soi

Un nล“ud correspondant en utilisant l'axe ยซ auto ยป. Il ne trouve toujours qu'un seul nล“ud car il reprรฉsente l'รฉlรฉment propre.

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

8) Descendant

Sรฉlectionne les descendants du nล“ud actuel comme indiquรฉ dans l'รฉcran ci-dessous.

Dans l'expression ci-dessous, il identifie tous les รฉlรฉments descendants de l'รฉlรฉment actuel (รฉlรฉment de cadre 'Main body surround'), ce qui signifie en bas sous le nล“ud (nล“ud enfant, nล“ud petit-enfant, etc.).

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

Descendant

Il y a 12 nล“uds ยซ lien ยป correspondant en utilisant l'axe ยซ descendant ยป. Si vous souhaitez vous concentrer sur un รฉlรฉment particulier, vous pouvez utiliser le XPath ci-dessous :

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

Vous pouvez modifier le XPath selon les besoins en mettant [1],[2]โ€ฆโ€ฆโ€ฆโ€ฆet ainsi de suite.

FAQ

XPath (XML Path Language) est utilisรฉ pour naviguer ร  travers les รฉlรฉments et les attributs d'un XML. XML ou un document HTML. Il permet d'identifier et de rรฉcupรฉrer des nล“uds spรฉcifiques, ce qui le rend essentiel pour le web scraping.ping, le traitement des donnรฉes XML et les outils de test automatisรฉs comme Selenium pour localiser les รฉlรฉments Web.

Utilisez XPath pour localiser des รฉlรฉments web complexes ou dynamiques, difficiles ร  identifier avec des localisateurs simples comme l'ID ou le nom de classe. Il est idรฉal pour naviguer dans des structures hiรฉrarchiques, sรฉlectionner des nล“uds par attributs et gรฉrer des รฉlรฉments sans identifiant unique.

Les localisateurs XPath sont des expressions permettant d'identifier des รฉlรฉments au sein de la structure d'un document. Ils spรฉcifient le chemin d'accรจs aux nล“uds ร  l'aide d'attributs, de texte, de hiรฉrarchie ou de position. Les stratรฉgies de localisation courantes consistent ร  sรฉlectionner des รฉlรฉments par nom de balise, valeurs d'attributs, correspondances partielles ou combinaisons logiques de conditions.

XPath se divise en deux types : XPath absolu et XPath relatif.

  • XPath absolu commence ร  partir du nล“ud racine (par exemple, /html/body/โ€ฆ) et fournit le chemin complet.
  • XPath relatif Il peut dรฉmarrer ร  partir de n'importe quel nล“ud (par exemple, //div[@id='content']) et est plus flexible et facile ร  maintenir.

Une simple barre oblique (/) sรฉlectionne les nล“uds situรฉs directement sous la racine ou le nล“ud courant, reprรฉsentant un chemin absolu. Une double barre oblique (//) recherche des nล“uds n'importe oรน dans le document, indรฉpendamment de la hiรฉrarchie, ce qui permet de trouver des รฉlรฉments plus facilement sans spรฉcifier le chemin complet.

Oui, XPath est sensible ร  la casse. Les noms d'รฉlรฉments, d'attributs et leurs valeurs doivent correspondre exactement ร  leur interprรฉtation dans le document. Par exemple, `//div` et `//DIV` sont traitรฉs diffรฉremment. Pour gรฉrer l'insensibilitรฉ ร  la casse, des fonctions comme `translate()` peuvent รชtre utilisรฉes dans les expressions XPath.

Rรฉsumรฉ

XPath est nรฉcessaire pour trouver un รฉlรฉment sur la page Web afin d'effectuer une opรฉration sur cet รฉlรฉment particulier.

  • Il existe deux types de XPath au sรฉlรฉnium :
    • XPath absolu
    • XPath relatif
  • Les axes XPath sont les mรฉthodes utilisรฉes pour rechercher des รฉlรฉments dynamiques, qui autrement ne seraient pas possibles par la mรฉthode XPath normale.
  • L'expression XPath sรฉlectionne des nล“uds ou une liste de nล“uds sur la base d'attributs tels que ID, Nom, Nom de classe, etc. ร  partir du document XML.

Vรฉrifiez รฉgalement: - Selenium Tutoriel pour dรฉbutants : Apprenez WebDriver en 7 jours

Rรฉsumez cet article avec :