Le mémo XPath ultime 2025

Ce guide complet vous apprend XPath : syntaxe, techniques avancées. Maîtrisez les expressions XPath robustes et efficaces.

Louis Dupont

Louis Dupont

5 June 2025

Le mémo XPath ultime 2025

XPath (XML Path Language) est un langage de requête puissant utilisé pour naviguer dans le Document Object Model (DOM) des documents HTML et XML. Pour les développeurs web, les testeurs et les ingénieurs en automatisation, maîtriser XPath est essentiel pour localiser et interagir précisément avec les éléments des pages web. Que vous développiez des tests automatisés avec Selenium, Playwright ou d'autres frameworks de test, ou que vous extraiez des données de sites web, XPath offre la flexibilité et la précision nécessaires pour naviguer même dans les structures DOM les plus complexes.

Ce guide complet vous présentera tout ce que vous devez savoir sur XPath, de la syntaxe de base aux techniques avancées, vous aidant à devenir compétent dans la création d'expressions XPath robustes et efficaces.

Avant de plonger plus profondément dans XPath, prenons un moment pour présenter Apidog, la meilleure alternative à Postman disponible aujourd'hui. Apidog combine la documentation, la conception, le débogage, les tests et la simulation d'API en une seule plateforme unifiée.

button

Contrairement à Postman, Apidog offre une interface plus intuitive, de meilleures fonctionnalités de collaboration d'équipe et une intégration transparente entre la conception et les tests d'API. Grâce à ses puissantes capacités de test, Apidog facilite la validation des API.

button

Si vous travaillez avec des API et des tests web, la boîte à outils complète d'Apidog peut considérablement rationaliser votre flux de travail et améliorer la productivité.

Qu'est-ce que XPath ?

XPath est un langage de requête conçu pour sélectionner des nœuds dans les documents XML. Puisque HTML peut être considéré comme une forme spécialisée de XML, XPath peut également être appliqué efficacement aux documents HTML. Il a été introduit pour la première fois par le World Wide Web Consortium (W3C) dans le cadre de la spécification XSLT 1.0 et est depuis devenu un outil essentiel pour l'automatisation web et l'extraction de données.

XPath sert de langage de navigation, vous permettant de parcourir la hiérarchie d'un document HTML en définissant des chemins vers des éléments, un peu comme vous naviguez dans des dossiers dans un système de fichiers. Ce qui rend XPath particulièrement puissant, c'est sa capacité à :

Localisateurs XPath dans l'automatisation web

Dans les frameworks d'automatisation web comme Selenium WebDriver, les localisateurs XPath servent de méthode principale pour identifier les éléments sur une page web. Bien que d'autres localisateurs comme les sélecteurs CSS, les ID ou les noms de classe soient souvent préférés pour leur simplicité et leurs performances, XPath offre une flexibilité inégalée dans les scénarios complexes.

Voici quelques avantages clés de l'utilisation de XPath dans l'automatisation web :

  1. Flexibilité : XPath peut localiser des éléments en fonction du contenu textuel, des relations parent-enfant et des relations frères et sœurs, ce que d'autres localisateurs ne peuvent pas facilement faire.
  2. Sélection basée sur le texte : XPath vous permet de trouver des éléments contenant un texte spécifique, ce qui est inestimable pour le contenu dynamique.
  3. Capacités de traversée : Vous pouvez naviguer vers le haut (vers les éléments parents), vers le bas (vers les éléments enfants) ou latéralement (vers les éléments frères et sœurs) dans l'arborescence DOM.
  4. Opérations logiques : XPath prend en charge les opérateurs logiques comme and, or et not, ce qui permet des conditions de sélection complexes.

Les essentiels de XPath

Pour utiliser XPath efficacement, il est important de comprendre ses composants et sa structure fondamentaux.

1. Syntaxe et structure

Les expressions XPath sont écrites sous forme d'une série d'étapes, séparées par des barres obliques (/), qui naviguent dans la hiérarchie des nœuds du document. Chaque étape se compose de :

La syntaxe de base suit ce modèle :

axisname::nodetest[predicate]

Où :

2. Axes clés et types de nœuds

XPath fournit divers axes pour définir les relations entre les nœuds :

Les types de nœuds qui peuvent être sélectionnés incluent :

3. Fonctions courantes

XPath comprend de nombreuses fonctions qui améliorent ses capacités :

Types XPath

Il existe deux approches principales pour construire des expressions XPath : absolue et relative.

Expression XPath absolue

XPath absolu fournit le chemin complet de la racine du document à l'élément cible. Il commence par une seule barre oblique (/) et inclut chaque élément de la hiérarchie.

Exemple :

/html/body/div[2]/form/input[3]

Avantages :

Inconvénients :

XPath relatif

XPath relatif commence à partir de n'importe quel point du document et utilise une double barre oblique (//) pour indiquer que le chemin peut commencer n'importe où. Cette approche est plus flexible et résistante aux changements de la structure du document.

Exemple :

//input[@id='email']

Avantages :

Inconvénients :

Syntaxe XPath

Comprendre les éléments de syntaxe de base est crucial pour construire des expressions XPath efficaces :

Éléments de syntaxe de base :

Prédicats

Les prédicats sont des conditions entre crochets qui filtrent la sélection des nœuds :

//div[@class='container']        // Sélectionne les éléments div avec la classe 'container'
//button[text()='Submit']        // Sélectionne les éléments button avec le texte 'Submit'
//li[position()=3]               // Sélectionne le troisième élément li
//input[@type='text' and @required]  // Sélectionne les éléments d'entrée de texte requis

Sélecteurs XPath

Les sélecteurs XPath définissent les critères de sélection des nœuds dans le document. Voici quelques modèles de sélecteurs courants :

Sélecteurs d'éléments :

//div                           // Sélectionne tous les éléments div
//div/p                         // Sélectionne tous les éléments p qui sont des enfants directs de div
//div//p                        // Sélectionne tous les éléments p n'importe où à l'intérieur de div

Sélecteurs d'attributs :

//*[@id='username']             // Sélectionne l'élément avec l'id 'username'
//input[@name='password']       // Sélectionne l'entrée avec le nom 'password'
//a[@href]                      // Sélectionne tous les liens avec l'attribut href
//img[@src='logo.png']          // Sélectionne l'image avec src spécifique

Sélecteurs de position :

//tr[1]                         // Sélectionne le premier élément tr
//tr[last()]                    // Sélectionne le dernier élément tr
//tr[position()>1]              // Sélectionne tous les éléments tr sauf le premier
//ul/li[position() mod 2 = 0]   // Sélectionne les éléments li de position paire

Sélecteurs de contenu textuel :

//h1[text()='Welcome']          // Sélectionne h1 avec le texte exact 'Welcome'
//p[contains(text(),'important')]  // Sélectionne p contenant le mot 'important'
//label[starts-with(text(),'User')] // Sélectionne les étiquettes commençant par 'User'

Expressions XPath

Les expressions XPath peuvent aller de simples à complexes, selon les éléments que vous devez localiser. Voici quelques exemples d'expressions de plus en plus complexes :

Expressions simples :

//h1                            // Tous les éléments h1
//div[@class='header']          // Tous les éléments div avec la classe 'header'
//input[@type='submit']         // Tous les boutons de soumission

Expressions intermédiaires :

//div[contains(@class,'product')]//span[@class='price']  // Portées de prix dans les div de produits
//table//tr[position() > 1]     // Toutes les lignes du tableau, sauf les en-têtes
//form[.//input[@required]]     // Formulaires contenant des entrées requises

Expressions avancées :

//div[not(@class='hidden') and contains(@id,'section')]  // Sections visibles avec un modèle d'ID spécifique
//ul[count(./li) > 5]           // Listes avec plus de 5 éléments
//a[contains(@href,'https') and not(contains(@class,'external'))]  // Liens HTTPS internes

Axes XPath

Les axes définissent la direction de la navigation à partir du nœud actuel. La compréhension des axes permet une sélection d'éléments plus sophistiquée :

Axes enfant et descendant :

child::div                      // Équivalent à ./div
descendant::p                   // Équivalent à .//p

Axes parent et ancêtre :

parent::div                     // Div parent du nœud actuel
ancestor::form                  // Tout ancêtre de formulaire du nœud actuel
ancestor-or-self::div           // Tout ancêtre div ou le nœud actuel s'il s'agit d'un div

Axes frères et sœurs :

following-sibling::li           // Tous les frères et sœurs li qui suivent le nœud actuel
preceding-sibling::div          // Tous les frères et sœurs div qui précèdent le nœud actuel

Autres axes utiles :

following::h2                   // Tous les éléments h2 qui apparaissent après le nœud actuel dans le document
preceding::input                // Tous les éléments d'entrée qui apparaissent avant le nœud actuel
self::p                         // Sélectionne le nœud actuel s'il s'agit d'un paragraphe

Opérateurs XPath

XPath prend en charge divers opérateurs pour créer des conditions complexes :

Opérateurs de comparaison :

Opérateurs logiques :

Opérateurs arithmétiques :

Exemples :

//input[@value > 100]           // Entrées avec une valeur supérieure à 100
//div[@class='item' and @id]    // Divs avec la classe 'item' qui ont également un ID
//product[price > 50 and price < 100]  // Produits avec un prix compris entre 50 et 100
//li[position() mod 2 = 1]      // Éléments de liste numérotés impairs

Fonctions XPath

XPath fournit de nombreuses fonctions intégrées pour la manipulation des données :

Fonctions de chaîne :

//a[contains(text(), 'Sign up')]  // Liens contenant le texte "Sign up"
//label[starts-with(@for, 'user')]  // Étiquettes avec l'attribut 'for' commençant par 'user'
//p[string-length(text()) > 100]  // Paragraphes avec un texte de plus de 100 caractères
//div[normalize-space(text())='Hello World']  // Divs avec le texte exact (en ignorant les espaces supplémentaires)

Fonctions numériques :

//ul[count(li) > 5]             // Listes avec plus de 5 éléments
//div[round(number(@data-value)) = 42]  // Divs avec une valeur de données qui s'arrondit à 42
//product[floor(price) = 99]    // Produits avec un prix qui s'arrondit à 99

Fonctions d'ensemble de nœuds :

//tr[position() = last()]       // Dernière ligne du tableau
//div[count(child::*) = 0]      // Éléments div vides (pas d'éléments enfants)
//div[not(descendant::a)]       // Divs qui ne contiennent aucun lien

Console de débogage pour XPath

L'une des méthodes les plus efficaces pour développer et tester des expressions XPath consiste à utiliser les outils de développement de votre navigateur :

Dans Chrome :

  1. Appuyez sur F12 ou Ctrl+Maj+I pour ouvrir DevTools
  2. Accédez à l'onglet Console
  3. Utilisez $x("your-xpath-here") pour évaluer les expressions XPath
  4. Les résultats apparaîtront sous forme de tableau d'éléments correspondants

Dans Firefox :

  1. Appuyez sur F12 ou Ctrl+Maj+I pour ouvrir DevTools
  2. Accédez à l'onglet Console
  3. Utilisez $x("your-xpath-here") pour évaluer les expressions XPath
  4. Les résultats apparaîtront sous forme de tableau d'éléments correspondants

Dans Edge :

  1. Appuyez sur F12 ou Ctrl+Maj+I pour ouvrir DevTools
  2. Accédez à l'onglet Console
  3. Utilisez $x("your-xpath-here") pour évaluer les expressions XPath
  4. Les résultats apparaîtront sous forme de tableau d'éléments correspondants

Cette boucle de rétroaction directe vous permet d'affiner rapidement vos expressions XPath jusqu'à ce qu'elles identifient correctement les éléments cibles.

Conseils et meilleures pratiques

1. Évitez les pièges courants

Restez simple : Les expressions XPath plus simples sont plus faciles à maintenir et moins susceptibles de se casser lorsque la structure de la page change. Visez des expressions concises qui ciblent directement votre élément à l'aide d'attributs uniques.

Évitez les chemins absolus : Les chemins absolus sont extrêmement fragiles. Si un élément du chemin change, XPath se casse. Utilisez des chemins relatifs qui se concentrent sur des identificateurs uniques chaque fois que possible.

Soyez précis : Rendez vos expressions aussi spécifiques que nécessaire, mais pas plus. La sur-spécificité peut rendre les expressions fragiles, tandis que la sous-spécificité peut correspondre à des éléments non intentionnels.

Utilisez les prédicats à bon escient : Les prédicats sont puissants pour filtrer les éléments, mais trop de prédicats imbriqués peuvent rendre les expressions difficiles à lire et à maintenir.

Tenez compte de la compatibilité inter-navigateurs : Certaines fonctionnalités XPath peuvent fonctionner différemment selon les navigateurs. Testez vos expressions dans tous les navigateurs cibles pour garantir la cohérence.

2. Optimiser les performances

Utilisez des sélecteurs efficaces : Dans la mesure du possible, utilisez des ID ou d'autres identificateurs uniques. L'expression //*[@id='username'] est généralement plus rapide que les sélecteurs hiérarchiques complexes.

Limitez l'utilisation de // : L'opérateur à double barre oblique (//) recherche dans l'ensemble du document, ce qui peut être lent. Lorsque vous connaissez l'emplacement général d'un élément, commencez par un chemin plus spécifique.

Éléments de cache : Si vous devez interagir avec le même élément plusieurs fois, stockez la référence plutôt que de la localiser à plusieurs reprises avec XPath.

Minimiser les appels XPath : Chaque évaluation XPath prend du temps. Regroupez les opérations lorsque cela est possible pour réduire le nombre de recherches.

Tester les performances : Si vous remarquez des ralentissements dans vos tests automatisés, profilez-les pour identifier si les requêtes XPath sont le goulot d'étranglement. Envisagez d'autres sélecteurs si nécessaire.

3. Déboguer efficacement

Utilisez les outils de développement du navigateur : La plupart des navigateurs modernes vous permettent de tester les expressions XPath directement dans la console. Cela fournit une rétroaction immédiate sur le fonctionnement de votre expression.

Résultats de sortie : Pendant le développement et le débogage, enregistrez les résultats de vos requêtes XPath pour vérifier que vous sélectionnez les éléments souhaités.

Parcourir le code pas à pas : Utilisez des points d'arrêt et un débogage pas à pas dans votre framework de test pour inspecter l'état de votre application et les résultats XPath.

Commentez votre XPath : Ajoutez des commentaires pour expliquer les expressions XPath complexes, en particulier lors de l'utilisation de fonctionnalités avancées ou de la gestion des cas limites.

Examinez et refactorisez régulièrement : Au fur et à mesure que votre application évolue, examinez périodiquement vos expressions XPath pour vous assurer qu'elles restent fiables et efficaces.

Fiche de référence XPath

Voici un guide de référence complet pour les expressions XPath :

Syntaxe XPath de base :

/                               // Sélectionne à partir du nœud racine
//                              // Sélectionne les nœuds n'importe où dans le document
.                               // Représente le nœud actuel
..                              // Représente le parent du nœud actuel

Sélecteurs :

element                         // Sélectionne tous les éléments avec le nom donné
@attribute                      // Sélectionne la valeur de l'attribut spécifié
*                               // Sélectionne tous les éléments enfants
text()                          // Sélectionne le texte dans un élément
[predicate]                     // Ajoute une condition pour filtrer les nœuds

Prédicats :

[name='value']                  // Sélectionne les nœuds avec la valeur d'attribut spécifiée
[position()]                    // Sélectionne les nœuds en fonction de leur position
[last()]                        // Sélectionne le dernier nœud d'un type donné
[contains(@attribute, 'value')] // Sélectionne les nœuds avec des valeurs d'attribut contenant 'value'
[not(predicate)]                // Négation d'une condition

Axes :

ancestor::                      // Sélectionne tous les ancêtres
ancestor-or-self::              // Sélectionne les ancêtres et le nœud actuel
child::                         // Sélectionne tous les enfants
descendant::                    // Sélectionne tous les descendants
descendant-or-self::            // Sélectionne les descendants et le nœud actuel
following::                     // Sélectionne tous les nœuds suivants
following-sibling::             // Sélectionne les frères et sœurs suivants
parent::                        // Sélectionne le nœud parent
preceding::                     // Sélectionne tous les nœuds précédents
preceding-sibling::             // Sélectionne les frères et sœurs précédents
self::                          // Sélectionne le nœud actuel

Opérateurs :

=                               // Égal à
!=                              // Non égal à
<                               // Inférieur à
<=                              // Inférieur ou égal à
>                               // Supérieur à
>=                              // Supérieur ou égal à
and                             // ET logique
or                              // OU logique
not                             // NON logique

Fonctions (Exemples) :

name()                          // Renvoie le nom du nœud actuel
count(nodes)                    // Renvoie le nombre de nœuds dans l'ensemble de nœuds
concat(string1, string2)        // Concatène deux chaînes
substring(string, start, length) // Renvoie une sous-chaîne
contains(string, substr)        // Vérifie si une chaîne contient une sous-chaîne
normalize-space(string)         // Supprime les espaces blancs de début/de fin et réduit les espaces

Exemples :

/bookstore/book                 // Sélectionne tous les éléments book dans la librairie racine
//title[text()='XPath']         // Sélectionne les éléments de titre avec le texte 'XPath' n'importe où dans le document
//*[@id='myId']                 // Sélectionne les éléments avec l'attribut id égal à 'myId'
/bookstore/book[position()=1]   // Sélectionne le premier élément book
//div[@class='highlight']//p    // Sélectionne les éléments p dans div avec la classe 'highlight'
//a[contains(@href, 'example.com')] // Sélectionne les éléments a avec 'example.com' dans l'attribut href

Techniques XPath avancées

Travailler avec des ID et des classes dynamiques

Les frameworks web modernes génèrent souvent des ID et des classes dynamiques qui changent à chaque chargement de page. Voici des techniques pour gérer ces scénarios :

// Utilisation de la correspondance partielle d'attributs
//div[contains(@id, 'main-content')]
//button[starts-with(@id, 'submit-')]
//input[ends-with(@id, '-input')] // Remarque : Il s'agit de XPath 2.0 et n'est pas pris en charge dans tous les navigateurs

// Utilisation de modèles de noms de classe
//div[contains(@class, 'btn') and contains(@class, 'primary')]

Gestion des iframes

La sélection d'éléments dans les iframes nécessite une gestion spéciale :

// Tout d'abord, localisez l'iframe
//iframe[@id='content-frame']

// Ensuite, dans Selenium, vous basculeriez vers le contexte de l'iframe avant d'utiliser XPath pour trouver des éléments à l'intérieur
// driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id='content-frame']")));

// Après avoir basculé, vous pouvez utiliser XPath normalement dans le contexte de l'iframe
//button[@id='submit']

Détection de la visibilité des éléments

XPath lui-même ne peut pas déterminer directement si un élément est visible, mais vous pouvez vérifier les propriétés qui indiquent souvent la visibilité :

// Les éléments avec display:none ont souvent un style en ligne
//div[not(contains(@style, 'display: none'))]

// Les éléments peuvent être masqués via des classes
//div[not(contains(@class, 'hidden'))]

// Les éléments peuvent avoir un attribut aria-hidden
//div[not(@aria-hidden='true')]

Gestion de plusieurs éléments avec les mêmes propriétés

Lorsque plusieurs éléments partagent les mêmes attributs ou propriétés, vous pouvez utiliser l'indexation ou des attributs plus spécifiques :

// Sélectionnez le deuxième bouton avec la classe 'action'
(//button[@class='action'])[2]

// Sélectionner en fonction du contenu textuel et de la classe
//button[@class='action' and contains(text(), 'Save')]

// Sélectionner en fonction des éléments environnants
//div[@class='card']//button[contains(text(), 'View details')]

XPath dans différents frameworks de test

Selenium WebDriver

Selenium prend en charge directement les localisateurs XPath :

// Exemple Java
WebElement element = driver.findElement(By.xpath("//button[@id='submit']"));

# Exemple Python
element = driver.find_element(By.XPATH, "//button[@id='submit']")

// Exemple JavaScript
const element = await driver.findElement(By.xpath("//button[@id='submit']"));

Playwright

Playwright prend en charge les sélecteurs XPath, bien que les sélecteurs CSS soient recommandés pour de meilleures performances :

// Exemple JavaScript
const element = await page.locator('xpath=//button[@id="submit"]');
await element.click();

# Exemple Python
element = page.locator('xpath=//button[@id="submit"]')
element.click()

Cypress

Cypress prend en charge XPath avec un plugin :

// Tout d'abord, installez le plugin : npm install -D cypress-xpath

// Ajouter à cypress/support/e2e.js :
// require('cypress-xpath')

// Ensuite, utilisez dans les tests
cy.xpath('//button[@id="submit"]').click()

Exemples XPath concrets

Exemples de sites web de commerce électronique :

// Trouver tous les produits avec une remise
//div[@class='product'][.//span[@class='discount']]

// Trouver les produits avec un prix dans une plage spécifique
//div[@class='product'][.//span[@class='price' and number(translate(text(), '$', '')) < 100]]

// Trouver les produits avec une note de 4 étoiles et plus
//div[@class='product'][.//div[@class='rating' and @data-stars >= 4]]

Exemples de validation de formulaire :

// Trouver tous les champs obligatoires
//input[@required]

// Trouver les champs avec des erreurs de validation
//input[../span[@class='error']]

// Trouver les étiquettes des champs obligatoires
//label[./following-sibling::input[@required] or ./input[@required]]

Exemples de données de tableau :

// Trouver les lignes du tableau avec un contenu spécifique
//table[@id='data']//tr[td[contains(text(), 'Completed')]]

// Trouver la cellule d'en-tête pour une colonne spécifique
//table//th[contains(text(), 'Status')]

// Trouver les cellules dans la même colonne qu'un en-tête spécifique
//table//th[contains(text(), 'Status')]/following-sibling::td

Conclusion

Maîtriser XPath est une compétence fondamentale pour toute personne impliquée dans l'automatisation des tests web ou l'extraction de données. Ce guide vous a doté d'une compréhension approfondie des éléments essentiels, de la syntaxe, des sélecteurs et des meilleures pratiques de XPath. En mettant en œuvre ces stratégies, vous pouvez optimiser vos processus de test automatisés, améliorer la fiabilité des tests et naviguer en toute confiance, même dans les structures DOM les plus complexes.

La flexibilité et la puissance de XPath en font un outil indispensable dans votre boîte à outils de test, en particulier lorsque vous traitez des applications web complexes où des localisateurs plus simples peuvent ne pas suffire. Bien que les sélecteurs CSS soient souvent préférés pour leurs performances, il existe de nombreux scénarios où les capacités uniques de XPath, comme la sélection d'éléments en fonction du contenu textuel ou la traversée de la

Explore more

Fathom-R1-14B : Modèle de raisonnement IA avancé d'Inde

Fathom-R1-14B : Modèle de raisonnement IA avancé d'Inde

L'IA en expansion rapide. Fathom-R1-14B (14,8 milliards de paramètres) excelle en raisonnement mathématique et général, conçu par Fractal AI Research.

5 June 2025

Mistral Code : L'assistant de codage le plus personnalisable basé sur l'IA pour les entreprises

Mistral Code : L'assistant de codage le plus personnalisable basé sur l'IA pour les entreprises

Découvrez Mistral Code, l'IA d'aide au code la plus personnalisable pour les entreprises.

5 June 2025

Comment Claude Code transforme le codage de l'IA en 2025

Comment Claude Code transforme le codage de l'IA en 2025

Découvrez Claude Code en 2025 : codage IA révolutionné. Fonctionnalités, démo, et pourquoi il gagne du terrain après Windsurf d'Anthropic. Indispensable !

5 June 2025

Pratiquez le Design-first d'API dans Apidog

Découvrez une manière plus simple de créer et utiliser des API