====== 07 - Pruebas E2E: Playwright ====== Una prueba **E2E** (*end-to-end*) ejecuta el sistema completo — interfaz, servidor y datos — como lo haría un usuario real: abre la aplicación en un navegador, interactúa con ella y comprueba el resultado visible. **Playwright** automatiza el navegador. ===== 1. Qué se prueba ===== * **Flujos críticos:** login, registro, compra, alta de datos. Pocos y bien elegidos. * **La integración de todo:** que la interfaz, la API y la base de datos funcionan juntas. * **Lo que el usuario ve:** el resultado visible de la operación, no los detalles internos. No se prueba cada regla de negocio con E2E: eso corresponde a las pruebas unitarias. Cada prueba E2E cubre un camino completo. ===== 2. Playwright ===== **Playwright** controla un navegador real (Chromium, Firefox, WebKit) desde código Java: public class LoginE2eTest { @Test void logsInAndShowsWelcome() { try (Playwright playwright = Playwright.create()) { Browser browser = playwright.chromium().launch(); Page page = browser.newPage(); page.navigate("http://localhost:8080/login"); page.fill("#email", "ana@example.com"); page.fill("#password", "secret-password"); page.click("button[type=submit]"); assertThat(page.locator(".welcome")) .hasText("Welcome, Ana"); } } } ^ Elemento ^ Función ^ | ''Playwright.create()'' | Inicia el motor de navegadores | | ''Page'' | Representa la pestaña abierta | | ''fill'', ''click'' | Interactúan con los elementos | | ''Locator'' | Localiza un elemento por selector | | ''assertThat'' | Comprueba el estado visible | ===== 3. Espera automática ===== Playwright **espera automáticamente** a que los elementos estén listos antes de interactuar: no hace falta dormir entre acciones. Las comprobaciones reintentan hasta que la condición se cumple o se agota el tiempo de espera. ===== 4. Buenas prácticas ===== * **Datos controlados:** cada prueba crea o usa datos conocidos; si toca la base de datos, se prepara y se limpia. * **Selectores estables:** preferir atributos semánticos (''id'', atributos ''data-testid'', roles accesibles) a clases de estilo, que cambian con el diseño. * **Independientes:** cada prueba puede ejecutarse sola y en cualquier orden. * **Pocas:** la pirámide se apoya en las unitarias; E2E cubre los flujos que, si fallan, rompen el producto. Las pruebas E2E son las más lentas y frágiles de la pirámide. Si cada cambio rompe diez pruebas de interfaz por un selector cambiado, el coste supera el beneficio: prioriza flujos críticos y selectores estables.