Skip to main content

Playwright Tests — Hawkers / Northweek

Tests automatizados end-to-end para los e-commerces de Hawkers y Northweek. Usa Playwright con TypeScript.


1. Estructura del proyecto

playwright-tests/
├── src/
│ ├── config/
│ │ └── env.ts # Lógica de entornos y base URLs
│ ├── constants/
│ │ ├── countries.ts # Lista de países soportados
│ │ ├── devices.ts # Definición de dispositivos
│ │ └── exclusions.ts # Países/SKUs excluidos por test
│ ├── pages/ # Page Object Models (POM)
│ │ ├── cart.ts
│ │ ├── checkout-page.ts
│ │ ├── collaborations-page.ts
│ │ ├── hellobar.ts
│ │ ├── home-page.ts
│ │ ├── place-order-page.ts
│ │ ├── promotions-page.ts
│ │ ├── sunglasses-page.ts
│ │ ├── thank-you-page.ts
│ │ └── hawkers213/ # POMs específicos del catálogo 2.1.3
│ │ ├── home-page.ts
│ │ ├── hoodies.ts
│ │ ├── longsleeve.ts
│ │ ├── pants.ts
│ │ ├── polos.ts
│ │ └── tees.ts
│ ├── reporters/
│ │ └── SlackReporter.ts # Reporter personalizado para Slack
│ └── utils/
│ ├── context.ts # Gestión de contexto de browser/página
│ ├── files.ts # Operaciones de ficheros
│ ├── generate-date.ts # Formateo de fechas para nombres de fichero
│ ├── screenshots.ts # Captura y guardado de screenshots
│ ├── promo-report.ts # Generador de informe visual de promos
│ ├── generate-pdp-report.ts # Generador de informe de PDP
│ ├── hawkers213-report.ts # Generador de informe de Hawkers 2.1.3
│ └── promo-sheet.ts # Integración con Google Sheets
├── tests/
│ ├── hawkers/ # Tests de la marca Hawkers (principal)
│ │ ├── smoke/ # Flujos críticos de pago (4 métodos)
│ │ ├── regression/ # Regresión completa (navegación, carrito, PDP...)
│ │ ├── cart-promos.spec.ts # Tests data-driven vía Google Sheets
│ │ ├── collabs/ # Tests de páginas de colaboraciones
│ │ ├── flash-sale/ # Tests de Flash Sale
│ │ ├── promo-2x1/ # Promoción 2x1
│ │ ├── promo-2x1-FS/ # Promoción 2x1 + Flash Sale
│ │ ├── promo-3x1/ # Promoción 3x1
│ │ ├── promo-3x1-FS/ # Promoción 3x1 + Flash Sale
│ │ ├── promo-desde-20-eur/ # Promoción "Desde 20€"
│ │ ├── promo-hasta-50/ # Promoción "Hasta 50%"
│ │ ├── promo-hasta-60/ # Promoción "Hasta 60%"
│ │ ├── promo-hasta-70/ # Promoción "Hasta 70%"
│ │ ├── promo-rebajas-2-60/ # Promoción Rebajas (2ª ud. -60%)
│ │ ├── promo1-30-2-50/ # 1ª ud. -30%, 2ª ud. -50%
│ │ ├── promo1-40-2-60/ # 1ª ud. -40%, 2ª ud. -60%
│ │ ├── promo1-50-2-60/ # 1ª ud. -50%, 2ª ud. -60%
│ │ └── promo-factory.ts # Utilidades compartidas para tests de promos
│ ├── hawkers213/ # Tests para el catálogo nuevo (v2.1.3)
│ │ ├── plp/ # Tests de Product List Page por categoría
│ │ └── regression/ # Flujo de compra con Stripe
│ ├── northweek/ # Tests de la marca Northweek
│ │ ├── promo-2x1/
│ │ ├── promo1-35-2-50/
│ │ ├── promo1-40-2-60/
│ │ └── regression/ # Flujos de compra (Stripe, multi-browser)
│ ├── images-validation/ # Validación de imágenes de producto
│ └── performance/ # Tests de rendimiento (PLP personalizada)
├── jenkins/ # Scripts de CI/CD
├── scripts/
│ └── upload-to-gcs.sh # Subida de informes a Google Cloud Storage
├── Dockerfile
├── Jenkinsfile
├── playwright.config.ts
├── package.json
└── tsconfig.json

2. Requisitos

  • Node.js >= 18.x
  • npm >= 9.x
  • Acceso a las variables de entorno del proyecto (ver sección siguiente)
  • (Opcional) Credenciales de Google Sheets para tests data-driven

3. Instalación

# 1. Clonar el repositorio
git clone <repo-url>
cd playwright-tests

# 2. Instalar dependencias de Node
npm install

# 3. Instalar los browsers de Playwright
npx playwright install

4. Variables de entorno

Crear un fichero .env en la raíz del proyecto. No existe .env.example en el repo; pedir las variables al equipo. Las principales son:

VariableValores posiblesDescripción
ENVIRONMENTstaging, production, dev, northweekstg, northweekprodEntorno de ejecución
AUTH_USERNAMEstringUsuario para HTTP Basic Auth (staging/dev)
AUTH_PASSWORDstringContraseña para HTTP Basic Auth (staging/dev)

URLs por entorno (definidas en playwright.config.ts):

EntornoURL
staginghttps://staging.hawkersco.com
productionhttps://www.hawkersco.com
devhttps://developmentsfcc.hawkersco.com
northweekstghttps://northweekstaging.hawkersco.com
northweekprodhttps://www.northweek.com
caution

Los entornos staging, dev y northweekstg requieren Basic Auth. Si AUTH_USERNAME y AUTH_PASSWORD no están configurados, los tests fallarán con 401.


5. Configuración de Playwright

El fichero playwright.config.ts es el punto central de configuración:

ParámetroValor
Timeout global120 segundos por test
Timeout de expect10 segundos
Reintentos2 en CI, 0 en local
Workers2 en CI, sin límite en local
Ejecución paralelaActivada por defecto

Imports con alias

El proyecto usa alias de imports definidos en package.json:

import { HomePage } from '#pages/home-page';
import { countries } from '#constants/countries';
import { getBaseUrl } from '#config/env';

6. Ejecutar tests

# Todos los tests
npx playwright test

# Un fichero específico
npx playwright test tests/hawkers/smoke/stripe-purchase-flows.spec.ts

# Un proyecto específico (ver sección de proyectos)
npx playwright test --project=hawkers-smoke

# Modo UI (debug visual)
npx playwright test --ui

# Modo headed (ver el browser)
npx playwright test --headed

# Ver el último informe HTML generado
npx playwright show-report

7. Proyectos de test

Playwright está configurado con 8 proyectos. Cada proyecto define qué tests ejecuta y en qué browser/dispositivo:

ProyectoBrowser/DispositivoTests
hawkers-smokeChromium (iPhone 14 Pro Max)tests/hawkers/smoke/
hawkers213-smokeChromium (iPhone 14 Pro Max)tests/hawkers213/smoke/
northweek-smokeChromium (iPhone 14 Pro Max)tests/northweek/smoke/
hawkers-fullChromium (iPhone 14 Pro Max)tests/hawkers/ (excluye smoke)
hawkers213-fullChromium (iPhone 14 Pro Max)tests/hawkers213/ (excluye smoke)
northweek-fullChromium (iPhone 14 Pro Max)tests/northweek/ (excluye smoke)
northweek-firefoxFirefox Desktoptests/northweek/ (excluye smoke)
northweek-webkitSafari Desktoptests/northweek/ (excluye smoke)
tip

Los proyectos *-smoke se ejecutan primero en CI para detectar bloqueadores críticos rápidamente.


8. Cobertura de tests

8.1 Smoke tests (tests/hawkers/smoke/)

Tests críticos de flujo de compra completo. Uno por método de pago:

FicheroMétodo de pago
stripe-purchase-flows.spec.tsTarjeta (Stripe)
paypal-purchase-flows.spec.tsPayPal
bizum-purchase-flows.spec.tsBizum
revolut-purchase-flows.spec.tsRevolut

Flujo típico: PLP → PDP → carrito → checkout → pago → página de confirmación.

8.2 Regression tests (tests/hawkers/regression/)

Validación de funcionalidades core del site:

FicheroQué valida
cart-flow.spec.tsAñadir/quitar productos, cantidades en carrito
menu-navigation.spec.tsNavegación por menú principal
navigation-flow.spec.tsFlujos de navegación entre páginas
pdp-flow.spec.tsPágina de detalle de producto
plp-pagination.spec.tsPaginación en listados
search-flow.spec.tsBuscador
footer-links.spec.tsLinks del footer

8.3 Tests de promociones (tests/hawkers/promo-*/)

Cada carpeta de promoción contiene 4 specs con el mismo patrón:

FicheroQué valida
home-*.spec.tsBanners/badges de promo en home y hello bar
plp-*.spec.tsBadges de descuento en Product List Page
pdp-*.spec.tsPrecio tachado y precio con descuento en PDP
cart-*.spec.tsRecálculo correcto del precio total en carrito

Los tests iteran sobre múltiples países (ver src/constants/countries.ts). Países soportados: España, Alemania, Francia, Italia, Portugal, Reino Unido, Bélgica, Polonia, Rumanía, Países Bajos, Suecia, Dinamarca, Grecia, Luxemburgo, México, Colombia, Australia, USA.

8.4 Tests data-driven con Google Sheets (cart-promos.spec.ts)

Lee en tiempo real la hoja de cálculo interna "actual-promo" de Google Sheets. Para cada fila:

  1. Obtiene el SKU y la promo activa
  2. Busca el SKU en el site
  3. Lo añade al carrito
  4. Valida que el badge/etiqueta de la promoción aparece correctamente

Para actualizar qué productos valida este test, basta con modificar la hoja de cálculo sin tocar código. La integración con Sheets está en src/utils/promo-sheet.ts.

8.5 Tests Hawkers 2.1.3 (tests/hawkers213/)

Tests para el catálogo nuevo de Hawkers (ropa). PLP por categoría:

  • plp-eyewear.spec.ts
  • plp-hoodies.spec.ts
  • plp-tees.spec.ts
  • plp-polos.spec.ts
  • plp-pants.spec.ts
  • plp-longsleeve.spec.ts
  • plp-knitwear.spec.ts
  • plp-collection.spec.ts

Los POMs de estas páginas están en src/pages/hawkers213/.

8.6 Tests de Northweek (tests/northweek/)

Misma estructura que Hawkers pero para la marca Northweek. Se ejecutan además en Firefox y Safari (WebKit).

8.7 Tests de rendimiento (tests/performance/)

FicheroQué mide
personalized-plp-order.spec.tsTiempos de carga de la PLP personalizada
performance-personalized-plp.spec.tsValidaciones adicionales de rendimiento

9. Page Object Models (POM)

Todos los POMs están en src/pages/. Encapsulan selectores y acciones sobre cada página.

important

Nunca poner selectores directamente en el spec. Siempre usar o extender un POM.

POMResponsabilidad
home-page.tsHome, hello bar, banners de promo
sunglasses-page.tsPLP de gafas
promotions-page.tsPáginas de promoción genéricas
collaborations-page.tsPáginas de colaboraciones
cart.tsCarrito: añadir productos, ver totales
checkout-page.tsFormulario de checkout
place-order-page.tsPaso de pago (Stripe, PayPal, Bizum…)
thank-you-page.tsPágina de confirmación de pedido
hellobar.tsBarra superior de comunicación

10. Utilities

UtilidadUbicaciónFunción
Contexto de browsersrc/utils/context.tsCrear y reutilizar contextos entre tests
Screenshotssrc/utils/screenshots.tsCaptura organizada por dispositivo y país
Fechassrc/utils/generate-date.tsFormateo consistente para nombres de fichero
Google Sheetssrc/utils/promo-sheet.tsAPI de Sheets, hoja "actual-promo"
Informe promossrc/utils/promo-report.tsHTML con screenshots de tests de promos
Informe PDPsrc/utils/generate-pdp-report.tsHTML específico para screenshots de PDP
Informe 2.1.3src/utils/hawkers213-report.tshw213-report.html para catálogo 2.1.3
Promo factorytests/hawkers/promo-factory.tsLógica compartida entre specs de promos

11. Informes y screenshots

Informe HTML de Playwright

npx playwright show-report

Abre el informe interactivo con detalle de cada test, trazas, screenshots y vídeos de los fallos.

Informes visuales personalizados

# Informe de promociones
npx ts-node src/utils/promo-report.ts

# Informe de PDP
npx ts-node src/utils/generate-pdp-report.ts

# Informe de Hawkers 2.1.3
npx ts-node src/utils/hawkers213-report.ts

Subir informe a GCS

npm run upload-report

Ejecuta scripts/upload-to-gcs.sh. Requiere credenciales de Google Cloud configuradas.


12. Añadir nuevos tests

Nuevo test de promoción

  1. Crear carpeta en tests/hawkers/promo-<nombre>/
  2. Copiar los 4 ficheros de una promo existente (ej. promo-hasta-50/) como plantilla
  3. Renombrar y adaptar los specs al nuevo tipo de promoción
  4. Si la lógica de validación es genérica, añadirla a tests/hawkers/promo-factory.ts
  5. Verificar que los selectores del badge/etiqueta en los POMs son correctos

Nuevo test de regresión

  1. Crear tests/hawkers/regression/<nombre>.spec.ts
  2. Importar los POMs necesarios desde src/pages/
  3. Seguir el patrón de test.describe / test.beforeAll / test.afterAll

Nuevo POM

  1. Crear src/pages/<nombre-pagina>.ts
  2. Exportar una clase con métodos para cada acción
  3. Usar el alias #pages/<nombre-pagina> en los imports

Ejemplo de spec

import { test, expect } from '@playwright/test';
import { HomePage } from '#pages/home-page';
import { countries } from '#constants/countries';

for (const country of countries) {
test.describe(`Mi test — ${country.name}`, () => {
test.beforeAll(async ({ browser }) => {
// setup
});

test('valida algo', async ({ page }) => {
const homePage = new HomePage(page);
await homePage.goto(country.locale);
await expect(homePage.someElement).toBeVisible();
});
});
}

13. CI/CD — Jenkins

Pipeline definido en Jenkinsfile. Scripts auxiliares en jenkins/scripts/:

ScriptFunción
npm.shInstala dependencias
test.shEjecuta los tests
deployment.shDespliegue del entorno
push.shPush de imágenes Docker
clean.shLimpieza de artefactos
sonar.shAnálisis de calidad con SonarQube

El Dockerfile permite ejecutar los tests en contenedor. En CI: 2 workers, 2 reintentos automáticos en caso de fallo.


14. Troubleshooting

Test falla por timeout

  • Comprobar que el selector del POM sigue siendo válido en el site
  • Aumentar el timeout puntualmente con test.setTimeout(180_000)
  • Ejecutar en modo --headed para ver qué ocurre

Error 401 en staging

  • AUTH_USERNAME o AUTH_PASSWORD no están en el .env
  • Verificar que ENVIRONMENT apunta al entorno correcto

Screenshots no aparecen en el informe

  • Confirmar que los tests guardan screenshots en src/utils/reports/screenshots/
  • Verificar que el script generador apunta al mismo path

Tests de Google Sheets fallan

  • Verificar credenciales de la API de Google en .env
  • Comprobar que la hoja "actual-promo" tiene datos y el formato esperado (ver promo-sheet.ts)

Error de import con alias (#pages/...)

  • Confirmar que tsconfig.json tiene los paths configurados
  • En algunos contextos puede ser necesario usar rutas relativas

15. Contacto

QA: Iker Ortega — iker.ortega@hawkersgroup.com