Travailler avec des attentes dynamiques est un enjeu crucial dans le domaine de l'automatisation UI, en particulier pour les applications web modernes où le contenu apparaît et change souvent de manière non instantanée.
Historique de la question
Dans les premières versions de l'automatisation, des attentes rigides (sleep) étaient utilisées, rendant les tests soit trop lents, soit sujets à des flake, si les applications prenaient plus de temps à charger. Cela est devenu pertinent à l'ère des SPA et du heavy JS.
Problème L'utilisation de délais statiques conduit à des tests instables et à une perte de temps : le test automatisé peut être retardé ou "échouer" de manière aléatoire. De plus, la scalabilité et la maintenance des tests en souffrent.
Solution
Utilisez des attentes dynamiques (explicites) : par exemple, WebDriverWait dans Selenium, la fonction waitFor dans les frameworks Cypress et Playwright.
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) # attente maximale de 10 secondes wait.until(EC.visibility_of_element_located((By.ID, 'my-element')))
Caractéristiques clés :
À quoi sert sleep, s'il existe des attentes dynamiques ?
L'utilisation de time.sleep() n'est justifiée que pour le débogage ou dans des cas extrêmes. Dans les tests automatisés réels, il est préférable de toujours utiliser des attentes explicites.
L'utilisation d'attentes peut-elle éliminer complètement les flakes ?
Non, si les conditions d'attente sont mal définies (par exemple, attendre l'apparition d'un attribut plutôt que le chargement complet des données), les flakes persisteront.
Peut-on faire une attente globale pour tous les tests ?
Non, les conditions d'apparition des éléments varient. Les attentes doivent être appliquées strictement aux étapes où cela est nécessaire.
sleep au lieu d'attentesTous les tests automatisés étaient écrits avec sleep(2) entre le "clic" et la vérification. Après la mise à jour de la page, les utilisateurs se plaignaient de ralentissements, et les tests échouaient parfois en raison d'une connexion Internet lente.
Avantages :
Inconvénients :
Des attentes explicites ont été configurées pour le chargement des blocs, le clic est devenu possible après l'apparition des éléments requis. On a abandonné sleep, tous les tests passent de manière stable et rapide.
Avantages :
Inconvénients :