Glossaire · Automatisation de l’UI
Locator
Également appelé : locators, localisateur, localisateur d'élément, element locator
Définition
La requête qu'un test d'interface utilise pour trouver un élément de la page, comme un rôle et un nom, un test id, un sélecteur CSS ou une expression XPath.
Un locator (localisateur) est la manière dont un test indique au driver du navigateur sur quel élément agir. Il peut s’agir d’un sélecteur CSS, d’une expression XPath, d’un id d’élément ou d’une requête de plus haut niveau comme « le bouton dont le nom accessible est Sign in ». Bien choisir ses locators est le facteur le plus déterminant pour qu’une suite d’interface survive à une refonte.
Exemple
Le même bouton localisé de trois façons :
// Playwright: user-facing, preferred
page.getByRole('button', { name: 'Sign in' });
// Playwright: dedicated test attribute
page.getByTestId('login-submit');
// Playwright: CSS, tied to markup structure
page.locator('form.login > button.btn-primary');
// Selenium 4
driver.findElement(By.id("login-submit"));
driver.findElement(By.cssSelector("[data-testid='login-submit']"));
Ce qui fait un bon locator
- Il décrit ce que voit l’utilisateur. Le rôle, le libellé et le texte visible ne changent que lorsque le comportement visible par l’utilisateur change, c’est-à-dire précisément quand le test doit de toute façon être mis à jour.
- Il est unique. Les locators Playwright sont stricts : une action sur un locator qui correspond à deux éléments lève une erreur au lieu de choisir silencieusement le premier.
- Il ne dépend pas de la mise en page. Les chemins longs comme
div > div:nth-child(3) > spancassent dès qu’un conteneur est ajouté. - Il est stable d’un build à l’autre. Les noms de classes générés par les outils CSS-in-JS et les id auto-incrémentés changent entre deux déploiements.
Un ordre de priorité courant : rôle et nom accessible, puis label ou placeholder, puis un data-testid convenu avec les développeurs, puis CSS, et enfin XPath en dernier recours.
Paresseux ou immédiat
Un Locator Playwright est paresseux (lazy). Il mémorise la requête et la résout à nouveau à chaque action ou assertion, ce qui explique qu’il ne puisse pas devenir obsolète (stale). Le findElement de Selenium est immédiat (eager) : il renvoie une référence WebElement vers le nœud qui existait à cet instant. Si le DOM est re-rendu, cette référence peut devenir obsolète ; c’est pourquoi le code Selenium stocke généralement des objets By et recherche l’élément au moment où il en a besoin.