Locators Playwright : getByRole plutôt que XPath
Un premier test Playwright qui casse après un simple changement de style vient presque toujours du sélecteur. Plutôt que de viser la structure de la page avec du CSS ou du XPath, Playwright recommande de viser ce que l'utilisateur voit : un rôle, un libellé, un texte. Voici pourquoi, les locators à connaître, et un test refactoré ligne par ligne. Les exemples ont été exécutés le 13 novembre 2026 avec Playwright 1.59.1 sur une page locale.
- Privilégier les locators orientés utilisateur : getByRole, getByLabel, getByText
- XPath et CSS restent possibles, mais cassent dès que la structure de la page change
- Un locator est strict : s'il trouve deux éléments, l'action échoue au lieu de choisir au hasard
- getByTestId reste le recours quand rien d'accessible n'identifie l'élément
Pourquoi les sélecteurs CSS et XPath cassent
Un sélecteur comme div.form > div:nth-child(2) > input décrit où se trouve le champ dans le code de la page. Si un développeur ajoute un conteneur ou déplace le champ, le test échoue alors que le comportement visible n'a pas changé. Une classe de style comme btn-primary change au gré des refontes graphiques. Ces tests sont fragiles parce qu'ils dépendent de détails que l'utilisateur ne voit jamais.
Les locators recommandés par Playwright
getByRole, getByLabel, getByText, getByTestId
getByRolecible un élément par son rôle accessible (button, link, heading, checkbox) et son nom :getByRole('button', { name: 'Créer mon compte' }).getByLabelcible un champ de formulaire par son libellé :getByLabel('E-mail').getByTextcible un élément par le texte affiché, pratique pour un message ou un élément non interactif.getByTestIdcible l'attributdata-testidque vous placez vous-même dans le code.
Locators stricts, chaînage et filtres
Un locator est strict : si getByRole('button', { name: 'Ajouter' }) trouve deux boutons, Playwright lève une erreur « strict mode violation » au lieu de cliquer sur l'un des deux. Cette erreur est utile, elle signale une ambiguïté. Pour la lever, restreignez la recherche en chaînant et en filtrant :
await page
.getByRole('listitem')
.filter({ hasText: 'Playwright' })
.getByRole('button', { name: 'Ajouter' })
.click();
Avant / après : refactorer un test fragile
Voici un même scénario écrit avec des sélecteurs de structure, puis avec des locators orientés utilisateur :
// Avant : dépend de la structure et des classes
await page.locator('div.form > div:nth-child(2) > input').fill('ada@example.com');
await page.locator('//button[contains(@class,"btn-primary")]').click();
await expect(page.locator('.toast > span')).toHaveText('Compte créé');
// Après : dépend de ce que l'utilisateur voit
await page.getByLabel('E-mail').fill('ada@example.com');
await page.getByRole('button', { name: 'Créer mon compte' }).click();
await expect(page.getByRole('status')).toHaveText('Compte créé');
| Ligne | Avant | Après | Gain |
|---|---|---|---|
| Champ e-mail | Position dans le DOM | Libellé du champ | Survit à un déplacement du champ |
| Bouton | XPath sur une classe CSS | Rôle et nom du bouton | Survit à un changement de style |
| Message | Structure du toast | Rôle « status » | Test lisible, sans détail de structure |
Quand garder un data-testid
Certains éléments n'ont ni rôle clair ni texte stable : un total affiché dans un tableau de bord, une zone générée dynamiquement, un texte traduit dans plusieurs langues. Dans ce cas, un data-testid posé par l'équipe est préférable à un sélecteur de structure : getByTestId('total'). Convenez-en avec les développeurs, et gardez ces identifiants stables.
Vérifier un locator avec Codegen et l'inspecteur
La commande npx playwright codegen ouvre un navigateur, enregistre vos actions et propose des locators. L'outil de sélection d'élément permet de survoler la page et de lire le locator suggéré. Relisez toujours le code généré : vérifiez qu'il vise un rôle ou un libellé, pas une position. Notre guide Playwright en français, notre guide sur Playwright et l'IA (MCP) et le cours Playwright gratuit détaillent ces outils, et le tutoriel Playwright Python montre les mêmes locators en Python.
Apprendre Playwright sur des cas concrets
La formation Playwright d'ADC se suit en week-end, en trois niveaux de 299 à 499 € TTC, et délivre un certificat ADC. Le niveau Débutant couvre les fondamentaux, dont les sélecteurs.
Voir les trois niveauxOussama Belakhdar
Architecte QA · ISTQB CTAL-TM
Fondateur d'AutomationDataCamp : formation, conseil et recrutement en test logiciel. Découvrir l'équipe →
Questions fréquentes sur les locators Playwright
Faut-il abandonner XPath avec Playwright ?
Non, XPath et CSS restent pris en charge. Gardez-les pour les cas où aucun rôle, libellé ou texte ne convient, en sachant qu'ils sont plus sensibles aux changements de structure de la page.
getByRole fonctionne-t-il avec tous les composants ?
Non. Il s'appuie sur les rôles et noms accessibles de la page. Un div cliquable sans rôle ni nom accessible ne sera pas trouvé : corrigez le balisage (un vrai bouton) ou utilisez un data-testid. Corriger le balisage améliore aussi l'accessibilité.
Comment choisir entre getByText et getByTestId ?
Utilisez getByText pour un texte que l'utilisateur lit et qui reste stable. Si le texte change souvent ou est traduit, préférez un data-testid convenu avec les développeurs.
Playwright, tests API, CI et IA appliquée au test, sans prérequis. Examens ISTQB CTFL et CT-GenAI inclus. 1 500 € en 1 à 4 fois ou financement entreprise.
Voir le programme de la formation testeur QA automatisation & IAQuelles certifications passer et dans quel ordre (CTFL, CT-GenAI, CTAL-TAE, CPACC, AWS) : format des examens, prérequis, prix. Plus la roadmap carrière, les salaires et un plan de 90 jours. PDF gratuit de 25 pages.
Télécharger le Guide QA Automation 2026Articles similaires

Playwright Python : tutoriel complet avec pytest
De l'installation à la CI : vos premiers tests Playwright en Python avec pytest, locators, assertions, Codegen, Trace Viewer et tests d'API...
Lire la suite : Playwright Python : tutoriel complet avec pytest
Playwright MCP : tester avec l'IA (Claude Code, Copilot, Cursor)
Installer Playwright MCP, laisser un assistant IA explorer une page puis générer un test, et savoir quand préférer la CLI ou les Test Agents...
Lire la suite : Playwright MCP : tester avec l'IA (Claude Code, Copilot, Cursor)