Glossaire · Automatisation de l’UI
Auto-waiting (attente automatique)
En anglais : Auto-waiting
Également appelé : auto-wait, attente automatique, actionability checks, vérifications d’actionnabilité
Définition
Une fonctionnalité du framework qui attend qu’un élément soit prêt (visible, stable, activé) avant d’agir dessus, au lieu de s’appuyer sur des pauses fixes.
L’auto-waiting signifie que le framework d’automatisation vérifie qu’un élément est prêt avant d’effectuer une action, et réessaie jusqu’à ce qu’il le soit ou qu’un timeout expire. Playwright et Cypress l’intègrent nativement. Dans Playwright, click() attend que l’élément soit attaché au DOM, visible, stable (pas en cours d’animation), capable de recevoir des événements (pas recouvert par un autre élément) et activé. Vous écrivez l’action ; le framework gère le timing.
Exemple
import { test, expect } from '@playwright/test';
test('saves the profile', async ({ page }) => {
await page.goto('/profile');
await page.getByLabel('Display name').fill('Ada');
// Waits until the button is visible, stable, enabled and not covered
await page.getByRole('button', { name: 'Save' }).click();
// Retries until the toast appears or the expect timeout is reached
await expect(page.getByRole('status')).toHaveText('Profile saved');
});
Il n’y a aucun waitForTimeout. Si le bouton d’enregistrement est désactivé un instant pendant la validation du formulaire, le clic attend au lieu d’échouer.
Différence avec les attentes explicites et implicites
Selenium WebDriver n’attend pas automatiquement avant les actions. Soit vous définissez une attente implicite, qui n’influe que sur la durée pendant laquelle findElement interroge le DOM pour qu’un élément existe, soit vous écrivez une attente explicite avec WebDriverWait et une condition ExpectedConditions comme elementToBeClickable. L’auto-waiting ressemble à une attente explicite que le framework écrit pour vous à chaque action, avec des vérifications adaptées à cette action : fill(), par exemple, exige aussi que l’élément soit éditable.
Limites
- Il attend l’élément, pas votre état métier. Si le bouton est cliquable avant que les données qu’il envoie ne soient chargées, l’auto-waiting ne vous sauvera pas. Vérifiez d’abord l’état dont vous avez besoin par une assertion.
- Il ne s’applique pas aux valeurs lues une seule fois.
await locator.textContent()renvoie ce qui est présent à cet instant. Pour attendre un texte, utilisez une assertion web-first commetoHaveText. - Il peut masquer la lenteur. Une étape qui consomme toujours l’essentiel de son timeout passe, mais c’est un signal de performance à examiner dans la trace.
force: truedésactive les vérifications. C’est parfois nécessaire pour des contrôles personnalisés, mais cela masque généralement un vrai problème.