Aller au contenu
SDETRole
SDETRole

Glossaire · Automatisation de l’UI

XPath

Également appelé : expression XPath, expressions XPath, XPath expression, XPaths

Définition

Langage de requête qui sélectionne des nœuds dans un document XML ou HTML, utilisé en automatisation d'interface pour localiser des éléments par structure, attributs ou texte.

XPath (XML Path Language) décrit un chemin à travers l’arbre d’un document jusqu’aux nœuds recherchés. En automatisation des tests, c’est l’une des manières d’écrire un locator, et son principal avantage sur CSS est de pouvoir filtrer sur le contenu textuel et de se déplacer dans toutes les directions : vers un parent, vers un frère ou vers un descendant. Les navigateurs implémentent XPath 1.0 : les fonctions des versions ultérieures, comme matches() ou lower-case(), ne sont donc pas disponibles.

Exemple

//button[normalize-space()='Sign in']
//input[@name='email']
//label[text()='Password']/following-sibling::input
//tr[td[normalize-space()='Order 1042']]//button[@aria-label='Cancel']
//a[contains(@href, '/invoices/')]

La quatrième ligne montre pourquoi on se tourne vers XPath : trouver la ligne de tableau qui contient une cellule donnée, puis le bouton à l’intérieur de cette ligne.

WebElement cancel = driver.findElement(
    By.xpath("//tr[td[normalize-space()='Order 1042']]//button[@aria-label='Cancel']"));

Absolu ou relatif

Un XPath absolu part de la racine (/html/body/div[2]/form/button) et casse dès qu’un conteneur change. Un XPath relatif commence par // et s’ancre sur quelque chose de significatif. Copier le « full XPath » depuis les DevTools vous donne la forme absolue, ce qui n’est presque jamais ce que vous voulez dans un test.

Erreurs fréquentes

  • Les chemins fondés sur des index comme (//div)[7]. Ils encodent la mise en page, pas le sens.
  • text() sur des éléments au markup imbriqué. //button[text()='Save'] échoue si le libellé se trouve dans un <span> enfant. normalize-space() (ou .) utilise à la place la valeur textuelle complète.
  • Cibler une classe avec @class='btn'. Cela ne fonctionne que si btn est la valeur entière de l’attribut. Utilisez contains(concat(' ', normalize-space(@class), ' '), ' btn '), ou passez au sélecteur CSS .btn.
  • Utiliser XPath par habitude. Dans Playwright, getByRole et getByText couvrent la plupart des cas fondés sur le texte et se lisent mieux.

Saisissez un terme pour rechercher sur SDETRole.

Recherche plein texte par Pagefind · s’exécute dans votre navigateur Ouvrir la page de recherche →