☕️ Nuestro primer Test: Validando el título de una web.

☕️ Nuestro primer Test: Validando el título de una web.

Nuestro primer test va a ser simple a propósito. La idea no es impresionar a nadie todavía, sino entender la estructura básica de un test en Playwright y ver todo el ciclo completo: escribir, ejecutar, ver el resultado.


¿Qué vamos a validar?

Vamos a navegar a https://www.freerangetesters.com y verificar que el título de la página sea el correcto. Nada más. Es un test de una sola validación, pero tiene todo lo que necesitamos para entender cómo funciona Playwright en la práctica.


La estructura de un test en Playwright

Antes de escribir el código, miremos la estructura general:

import { test, expect } from "@playwright/test";

test("descripción del test", async ({ page }) => {
  // acá va lo que hace el test
});

Tres partes clave:

import { test, expect }: importamos las dos herramientas principales de Playwright. test es la función que define un test, expect es la que nos permite hacer validaciones.

"descripción del test": un texto que describe qué hace este test. Es lo que vas a ver en el reporte cuando corra. Tiene que ser claro y específico: no "test 1", sino algo que le diga a quien lo lee qué está verificando.

async ({ page }) =>: la función que contiene la lógica del test. El async es obligatorio porque las operaciones de Playwright son asíncronas. El { page } es un fixture: Playwright nos inyecta automáticamente una instancia del browser lista para usar.


El test

import { test, expect } from "@playwright/test";

test("la página principal de Free Range Testers tiene el título correcto", async ({ page }) => {
  await page.goto("https://www.freerangetesters.com");
  await expect(page).toHaveTitle("Free Range Testers");
});

Tres líneas de lógica. Vamos una por una:

await page.goto(...): navegamos a la URL. Playwright abre el browser, va a esa dirección y espera a que la página cargue antes de continuar.

await expect(page).toHaveTitle(...): validamos que el título de la página sea exactamente "Free Range Testers". Si coincide, el test pasa. Si no coincide, falla y Playwright nos muestra qué encontró versus qué esperaba.


Correr el test

Desde la terminal, en la carpeta del proyecto:

npx playwright test

Playwright va a buscar todos los archivos que terminen en .spec.ts dentro de la carpeta tests/, ejecutar los tests y mostrar el resultado en la terminal.

Si querés correr solo este test en particular:

npx playwright test --grep "la página principal"

Y para ver el reporte visual:

npx playwright show-report

¿Qué pasa si el test falla?

Probemos cambiando el título esperado a algo incorrecto a propósito:

await expect(page).toHaveTitle("Este título no existe");

Playwright va a mostrar algo así:

Error: expect(page).toHaveTitle(expected)

Expected: "Este título no existe"
Received: "Free Range Testers"

El error es claro: te dice exactamente qué esperabas y qué encontró. Eso es lo que queremos de un buen mensaje de falla: sin ambigüedad, directo al punto.


Una cosa que vale la pena notar

toHaveTitle() no es una comparación instantánea. Tiene auto-waiting incorporado: si la página todavía está cargando cuando llega a esa línea, Playwright va a reintentar la validación hasta que el título esté disponible o hasta que se agote el timeout. No necesitás agregar ninguna espera manual antes de la validación.

Eso es algo que vas a ver repetido en todo Playwright y que marca una diferencia enorme respecto a otras herramientas: el framework espera por vos, inteligentemente, sin que tengas que decirle cuánto tiempo.

Código que hemos usado en el archivo FreeRangeTesters.spec.ts

test("Validar título de la página Free Range Testers", async ({ page }) => {
    await test.step("Estando yo en la web principal www.freerangetesters.com", async () => {
      await page.goto('https://www.freerangetesters.com');
      await expect(page).toHaveTitle('Free Range Testers');
    });
});

E2E Testing con Playwright y TypeScript

Comprar ahoraSaber más

Introducción al curso

  • 🤔 ¿Cómo consultar tus dudas?
  • 🤓 Recomendaciones para hacer el curso9
  • 🫵🏻 Actividades en el curso
  • 🤔 ¿Qué es E2E Testing?2
  • 🧑🏻‍💻 E2E: Beneficios y desafíos de implementarlo.
  • 🎭 Un primer vistazo a Playwright
  • ❔ Cuestionario módulo 1
  • 🔥 Asignación4

Instalación y configuración de nuestro espacio de trabajo

  • 🧑🏻‍💻 Instalación de Node.JS, NPM y Playwright7
  • 🤖 Extensiones útiles para trabajar con Playwright y VSCode5
  • ❔ Cuestionario rápido para este módulo
  • 🔥 Asignación2

TypeScript como lenguaje

  • 🤯 Los tipos y TypeScript: ¿En qué se diferencia con JavaScript?2
  • 🧑🏻‍🎓 Clases y funciones en TypeScript2
  • 😱 El uso de Async y Await en Playwright3
  • ❔ Cuestionario módulo 3
  • 🔥 Asignación1

Introducción a Playwright

  • 🚀 Arquitectura y componentes
  • 📍 Navegando a una URL15
  • ☕️ Nuestro primer Test: Validando el título de una web.
  • 🙌🏻 Bonus: Un solo test para validar todos los links del header de forma separada.10
  • ❔ Cuestionario módulo 4
  • 🔥 Asignación4

Encontrar elementos en una página web: Locators

  • 🪲 Introducción a los Locators
  • 📕 locators: getByRole()3
  • 💎 locators: getByText()
  • 💡 locators: getByLabel y getByPlaceholder
  • 📎 locators: getByAltText()4
  • 🪔 locators: getByTitle()4
  • 🔆 locators: getByTestId()2
  • ♨️ Extra: Configurar el TestID con otro nombre
  • 📢 Locators: CSS y Path
  • 💢 Locators: El uso de { exact : true }
  • 🗣️ Shadow DOM4
  • 📚 Filtrando nuestros locators por Texto
  • 📗 Filtrando por otro locator
  • 🙏🏻 Filtrando por elemento visible
  • 👻 ¿Qué hacer con las listas y sus elementos?
  • ❔ Cuestionario
  • 🔥 Asignación1

Interactuar con Elementos web.

  • 🖲️ El click: El comando que más vamos a usar.10
  • 🧩 El comando Fill: Interactuando con campos de texto1
  • 🏄🏻 BONUS: Type, presionar teclas4
  • 🤖 Checkboxes y Radio Buttons: Cómo trabajar con estos elementos?
  • 🤫 Dropdowns: ¿Cómo trabajar con ellos?4
  • 🔥 Upload y Drag and Drop: No tan frecuentes, pero útiles comandos para interactuar con el Front End1
  • ❓ Cuestionario
  • 🔥 Asignación1

Validando el estado de nuestro sistema

  • 📍 Qué son los Assertions?
  • 🚀 Creando nuestras primeras validaciones: Checked y Unchecked4
  • 👀 Validando un texto visible luego de una operación asíncrona
  • 🎁 Validando que el campo tiene el valor esperado
  • 🔍 Un ejercicio sencillo que se complica: Validando los items en un dropdown engañoso15
  • 🔨 Validaciones tabla estatica: ¿Cómo lo hacemos?6
  • 🖥️ Validaciones en una tabla dinámica1
  • ⌨️ Soft Assertions: ¿Qué son y para qué sirven?2
  • 💻 Validando el popup en Free Range Sandbox: El approach oficial y qué hacer cuando no funciona
  • ❓ Cuestionario
  • 🔥 Asignación: Validaciones4

Ejecución y su control

  • 🫨 Anotaciones: Skip, Only y Tags4
  • 🧠 Anotaciones: Fail, Fix me y Screenshots!5
  • 🏹 playwright.config.ts
  • 🧉 Creando configuraciones con Projects1
  • 🏆 Modo UI: El mejor compañero de trabajo!
  • 🛹 Dos maneras de crear Tests sin (casi) escribir código
  • ❓ Cuestionario
  • 🔥 Asignación del Módulo: Ejecución y Control de Tests con Playwright

Playwright y las APIs

  • 🎯 Es Playwright una herramienta para API Testing?
  • ⛳️ Configurando nuestras pruebas de API31
  • 🥊 Completando un flujo de pruebas API
  • 🎣 Integrando E2E y API Testing2
  • ❓ Cuestionario
  • 🔥 Asignación del Módulo: API Testing con Playwright

Playwright avanzado y mejores prácticas

  • 👓 Page Object Model: ¿Qué es y por qué implementarlo?3
  • 🫶🏻 Creando respuestas falsas con mocks3
  • 🙃 Agregando elementos extra a una respuesta real de una API con mocks
  • 🧛🏻‍♂️ El reporte de Playwright y algunas configuraciones extra para hacerlo más completo
  • 🔛 Múltiples ambientes con los mismos tests4
  • 🦶🏻 Mejores prácticas con Playwright
  • ❓ Cuestionario
  • 🔥 Asignación del Módulo: Playwright Avanzado - Page Object Model, Mocking, Reportes y Mejores Prácticas

Palabras finales

  • 🙌🏻 Despedida y conclusión final
  • 📝 Dejá tu testimonio inmortalizado en la web!