Tutoriel XPath dans Selenium et autres outils automatisés

Tutoriel XPath dans Selenium et autres outils automatisés
MIN
01 Déc 2023

Dans ce tutoriel xPath, nous allons couvrir l’utilisation du localisateur XPath dans Selenium WebDriver et d’autres outils automatisés. Dans notre article sur la recherche de WebElements dans Selenium, nous avons étudié les différents types de localisateurs utilisés dans Selenium WebDriver.

Nous étudierons ici comment créer des localisateurs Xpath, les différents types de Xpath et comment rechercher des éléments dynamiques à l’aide de XPath.

Table des matières

Qu’est-ce que XPath ?

XPath peut être défini comme un langage de requête utilisé pour naviguer dans les documents XML afin d’y trouver différents éléments. La syntaxe de base de l’expression XPath est la suivante:-

//tag[@attributeName=’attributeValues’]

Prenons maintenant un exemple pour comprendre les différents éléments de la syntaxe d’expression Xpath : les balises, les attributs et les valeurs d’attribut. Examinez l’image suivante d’une page web de Google avec Firebug contrôlant la div de la barre de recherche.

Capture d'écran de la syntaxe des expressions XPath
La syntaxe des expressions XPath est très utile pour créer d’autres expressions XPath.
  • ‘/’ ou ‘//’ – La barre oblique simple et la barre oblique double sont utilisées pour créer des chemins XPath absolus et relatifs (expliqués plus loin dans ce tutoriel). Une simple barre oblique est utilisée pour commencer la sélection à partir du nœud racine. La double barre oblique est utilisée pour récupérer le nœud courant correspondant à la sélection. Pour l’instant, nous utiliserons « // ».
  • <>Balise – Les balises HTML commencent par ‘ ‘ et se terminent par ‘ ‘. Ils sont utilisés pour entourer différents éléments et fournir des informations sur le traitement de ces éléments. Dans l’image ci-dessus, les balises « div » et « input » sont affichées.
  • Attribut – Les attributs définissent les propriétés des éléments HTML. Dans la figure ci-dessus, les attributs de l’élément extérieur div sont id, classes et dir.
  • AttributeValue – Les valeurs d’attributs, comme leur nom l’indique, sont des valeurs d’attributs, par ex. « sb_ifc0 » est la valeur de l’attribut « id ».

En utilisant la syntaxe XPath présentée ci-dessus, nous pouvons créer plusieurs expressions XPath pour la barre de recherche-div de Google présentée dans l’image, telles que //div[@id=’sb_ifc0′], //div[@class=’sbib_b’], ou //div[@dir=’ltr’]. Chacune de ces expressions peut être utilisée pour récupérer l’élément souhaité, à condition que les attributs sélectionnés soient uniques.

Quels sont les différents types de XPath ?

Il existe deux types d’expressions XPath :

  • XPath absolu – Les expressions XPath créées à l’aide d’expressions XPath absolues commencent la sélection à partir du nœud racine. Ces expressions commencent par un caractère « / » ou un nœud racine et parcourent l’ensemble du DOM pour atteindre l’élément.
  • XPath relatif – Les expressions XPath relatives sont beaucoup plus compactes et utilisent des doubles barres obliques « // ». Ces expressions XPath peuvent sélectionner des éléments à n’importe quel endroit correspondant aux critères de sélection et ne commençant pas nécessairement par le nœud racine.

Laquelle de ces deux expressions est la meilleure ? » – Les expressions XPath relatives sont considérées comme meilleures parce qu’elles sont plus faciles à lire et à créer ; elles sont également plus robustes. Le problème des chemins XPath absolus est que même un petit changement dans le DOM entre le chemin du nœud racine et l’élément désiré peut invalider le chemin XPath.

Recherche d’éléments dynamiques à l’aide de XPaths

Dans le domaine de l’automatisation, il arrive souvent que les éléments ne soient pas dotés d’attributs uniques permettant de les identifier de manière unique, ou que les éléments soient générés de manière dynamique, la valeur de l’attribut n’étant pas connue à l’avance.

Dans ce cas, XPath propose plusieurs méthodes de recherche d’éléments, par exemple en utilisant le texte écrit au-dessus des éléments, en utilisant l’index de l’élément, en utilisant une valeur d’attribut partiellement correspondante, en se déplaçant vers un frère, un enfant ou un parent de l’élément qui peut être identifié de manière unique, et ainsi de suite.

Utilisation de la fonction text()

La fonction text() permet de trouver un élément en fonction du texte écrit au-dessus de lui. XPath pour le bouton « GoogleSearch » :

[text()=’Google Search’]//* (ici, nous avons utilisé ‘*’ pour faire correspondre n’importe quelle balise avec le texte souhaité)

Utilisation de la fonction contains()

La fonction contains() permet également de comparer les valeurs d’attributs partiellement identiques. Cette fonction est particulièrement utile pour rechercher des valeurs dynamiques dont une partie reste constante, par exemple Le XPath pour la div externe dans l’image ci-dessus avec l’id « sb_ifc0 » peut également être trouvé avec l’id partiel – « sb » en utilisant contains() – //div[contains(@id,’sb’)]

Utilisation de l’index des éléments

En spécifiant la position de l’index entre crochets, nous pouvons passer au nième élément satisfaisant à la condition, par exemple //div[@id=’elementid’]/input[4] récupère le quatrième élément d’entrée à l’intérieur de l’élément div.

Utiliser les axes XPath

Les axes XPath permettent de localiser des éléments web complexes en les faisant passer par un frère, un descendant ou un parent d’autres éléments facilement identifiables. Les axes les plus utilisés sont les suivants :

enfantSélection des nœuds enfants du nœud de référence.
Syntaxe – XpathForReferenceNode/child::tag
parentSélection du nœud parent du nœud de référence.
Syntaxe – XpathForReferenceNode/parent::tag
suivantSélectionnez tous les nœuds qui suivent le nœud de référence.
Syntaxe – XpathForReferenceNode/following::tag
précédentSélectionnez tous les nœuds situés avant le nœud de référence.
Syntaxe – XpathForReferenceNode/preceding::tag
ancêtreSélection de tous les éléments ancêtres avant le nœud de référence.
Syntaxe – XpathForReferenceNode/ancestor::tag