E2E testing automatiza lo que hace un usuario: clickea botones, rellena formularios, verifica resultados. Playwright lo hace sin drama.
Selectores robustos: evita tests que se rompen
El error más común es testear contra selectores frágiles: .button-1, div:nth-child(3). Si cambias estructura HTML, se rompe.
La solución es selectores robustos: busca por atributos estables como data-testid, aria-label, o contenido visible.
- data-testid: atributo específico para tests.
- aria-label: semánticamente correcto y testeable.
- text content: si el botón dice "Guardar", busca por eso.
Esperas inteligentes: no uses sleep()
Nunca uses sleep(2000) esperando que algo cargue. Espera explícitamente el elemento: page.waitForSelector(), page.locator().toBeVisible().
Sleep hace tests lentos e impredecibles. Esperas explícitas son rápidas y confiables.
- Espera el elemento a aparecer.
- Espera que sea visible.
- Espera que sea clickeable.
- Después interactúa.
Page objects: abstrae UI en lógica de negocio
En lugar de script que hace click en botón 1, luego 2, luego 3, abstrae en Page Objects: login(), fillForm(), verifySuccess().
Eso separa cómo se clickea (selectores) de qué se hace (lógica de test). Si UI cambia, solo cambias Page Object.
- Page Object por pantalla o flujo.
- Métodos que representan acciones: login(), submit().
- Selectores centralizados en Page Object.
Datos de test y base de datos limpia
Cada test debería empezar con datos predecibles. Usa fixtures o beforeEach() para resetear base de datos.
Así cada test es independiente: no depende de estado de test anterior.
Un E2E test bueno es uno que pasa igual corrido solo, corrido primero o corrido último. Eso es independencia.
Ejecución paralela para velocidad
Playwright permite correr múltiples tests en paralelo. Si tienes 100 tests que toman 30 minutos sequencial, con paralelismo toman 3 minutos.
La clave es que tests sean independientes (cada uno usa datos propios, no interfieren).