Playwright : attente automatique, sélecteurs & tracing
Rencontrez maintenant Playwright, l'outil plus récent. Le meilleur, c'est ce que vous cessez d'écrire : la plupart de ces attentes manuelles disparaissent.
L'idée, en une ligne
Avant chaque action, Playwright vérifie que l'élément est réellement prêt et réessaie tout seul jusqu'à ce qu'il le soit. Vous décrivez ce que vous voulez ; il gère l'attente.
Les vérifications de disponibilité, en mots simples
Playwright attend que l'élément soit :
- visible — réellement à l'écran
- stable — plus en mouvement (sa boîte est inchangée sur deux frames)
- activé — pas grisé
- éditable — pour taper, il accepte l'entrée
- reçoit les événements — pas caché sous une surcouche
Un clic attend les cinq. Un fill attend visible, activé et éditable. Des catégories entières d'instabilité disparaissent simplement.
Des sélecteurs qui se lisent comme un utilisateur
Préférez page.get_by_role("button", name="Sign in"). Il correspond à la façon dont une personne (et un lecteur d'écran) voit la page, donc il survit aux changements du DOM. Ses cousins sont get_by_label, get_by_placeholder, get_by_text, et get_by_test_id. Quand vous avez besoin de CSS ou XPath brut, page.locator(css) est la porte de sortie.
Voyez-le à l'œuvre
from playwright.sync_api import Page, expect
def test_login(page: Page):
page.goto("https://www.saucedemo.com/")
# Locators by role and placeholder, no manual waits
page.get_by_placeholder("Username").fill("standard_user")
page.get_by_placeholder("Password").fill("secret_sauce")
page.get_by_role("button", name="Login").click()
# A web-first assertion auto-retries until it passes
expect(page.get_by_text("Products")).to_be_visible()
# Record a trace, then open it:
# pytest --tracing on
# playwright show-trace trace.zipLisez-le de haut en bas : allez sur la page, remplissez les deux champs, cliquez sur Login, puis vérifiez que le texte Products apparaît. Aucun sleep nulle part.
Les assertions ici utilisent expect(...).to_be_visible(). Elle re-vérifie jusqu'à ce que ce soit vrai ou qu'elle expire — vous ne sondez jamais à la main.
Avancé — le tracing, votre ralenti instantané
Quand un test échoue, le tracing est la récompense. Exécutez pytest --tracing on, puis playwright show-trace trace.zip. Vous obtenez une chronologie image par image avec des instantanés du DOM, l'activité réseau, et la ligne source exacte de chaque action.
Basé sur la doc officielle Playwright (Python) — Actionability, Locators, Trace Viewer
Toutes les leçons de Automatisation UI : Selenium + Playwright + pytest
- Sélecteurs Selenium : trouver l'élément que vous voulez
- Attentes, actions & frames — tuer l'instabilité à la source
- Playwright : attente automatique, sélecteurs & tracing
- pytest en profondeur : fixtures, conftest, parametrize & marqueurs
- Le Page Object Model, fait correctement
- Les cas difficiles : éléments dynamiques, iframes, uploads & simulation réseau