Este proyecto contiene pruebas de automatización desarrolladas con Playwright y TypeScript, implementando el patrón Page Object Model (POM) para pruebas end-to-end y pruebas de integración con APIs.
- Requisitos Previos
- Instalación
- Configuración
- Estructura del Proyecto
- Ejecución de Pruebas
- Reportes
- Pruebas Incluidas
Antes de comenzar, asegúrate de tener instalado:
- Node.js (versión 16 o superior)
- npm (incluido con Node.js)
- Git (para clonar el repositorio)
-
Clonar el repositorio (o descargar el código fuente):
git clone <url-del-repositorio> cd pruebaTecnicaFarmatodo
-
Instalar las dependencias:
npm install
-
Instalar los navegadores de Playwright:
npx playwright install
O instalar solo Chromium:
npx playwright install chromium
El proyecto utiliza un archivo .env para gestionar las variables de entorno. Crea un archivo .env en la raíz del proyecto con el siguiente contenido:
# API de Pokemon
BASE_URL_POKEMON=https://pokeapi.co/api/v2
# Sauce Demo - Credenciales y URL
BASE_URL_SAUCE=https://www.saucedemo.com/
SAUCEDEMO_USERNAME=standard_user
SAUCEDEMO_PASSWORD=secret_sauceNota: El archivo .env está incluido en .gitignore por seguridad. No se debe versionar en el repositorio.
Puedes crear el archivo manualmente o usar el siguiente comando:
# Windows (PowerShell)
echo BASE_URL_POKEMON=https://pokeapi.co/api/v2 > .env
echo BASE_URL_SAUCE=https://www.saucedemo.com/ >> .env
echo SAUCEDEMO_USERNAME=standard_user >> .env
echo SAUCEDEMO_PASSWORD=secret_sauce >> .env
# Linux/Mac
cat > .env << EOF
BASE_URL_POKEMON=https://pokeapi.co/api/v2
BASE_URL_SAUCE=https://www.saucedemo.com/
SAUCEDEMO_USERNAME=standard_user
SAUCEDEMO_PASSWORD=secret_sauce
EOFpruebaTecnicaFarmatodo/
├── common/ # Utilidades comunes
│ └── TakeScreenshot.ts # Clase para capturas de pantalla
├── pages/ # Page Objects (POM)
│ ├── LoginPage.ts # Página de login
│ ├── ProductsPage.ts # Página de productos
│ ├── CartPage.ts # Página del carrito
│ └── CheckoutPage.ts # Página de checkout
├── ui/ # Localizadores de elementos
│ ├── login.locators.ts
│ ├── products.locators.ts
│ ├── cart.locators.ts
│ └── checkout.locators.ts
├── scripts/ # Scripts y utilidades
│ ├── ordenamiento.ts # Algoritmo de ordenamiento
│ └── pokemon.ts # Funciones para Pokemon
├── tests/ # Pruebas
│ ├── pokemon-evolution.spec.ts # Prueba de integración API
│ └── saucedemo-e2e.spec.ts # Prueba E2E
├── test-results/ # Resultados de pruebas
│ ├── pokemon-reports/ # Reportes en texto
│ └── [carpetas por tipo]/ # Screenshots organizados
├── playwright-report/ # Reporte HTML de Playwright
├── playwright.config.ts # Configuración de Playwright
├── package.json # Dependencias y scripts
└── .env # Variables de entorno (no versionado)
npm testPrueba de integración (Pokemon API):
npm test -- tests/pokemon-evolution.spec.tsPrueba E2E (Sauce Demo):
npm test -- tests/saucedemo-e2e.spec.tsModo con interfaz gráfica (headed):
npm run test:headedModo de depuración:
npm run test:debugModo con UI interactiva:
npm run test:uiPor defecto, las pruebas se ejecutan con el navegador visible. Para ejecutar en modo headless, edita playwright.config.ts y cambia:
headless: trueDespués de ejecutar las pruebas, se genera un reporte HTML interactivo:
npx playwright show-reportEl reporte se encuentra en: playwright-report/index.html
Cada ejecución de la prueba de Pokemon genera un archivo .txt con los resultados detallados en:
test-results/pokemon-reports/pokemon-evolution-result-[timestamp].txt
Las capturas de pantalla se guardan automáticamente en:
test-results/
├── login/ # Screenshots de login
├── products/ # Screenshots de productos
├── cart/ # Screenshots del carrito
└── checkout/ # Screenshots de checkout
Archivo: tests/pokemon-evolution.spec.ts
Descripción:
- Obtiene la cadena de evoluciones del Pokemon Squirtle desde la API pública PokéApi
- Extrae los nombres y pesos de todas las especies en la cadena
- Ordena los resultados alfabéticamente sin usar métodos nativos como
.sort() - Valida que todas las APIs respondan con código 200
- Genera un reporte en formato
.txtcon los resultados
Criterios de Aceptación:
- ✅ Las APIs responden con código 200
- ✅ Se extraen correctamente los nombres de los Pokemon
- ✅ La lista se ordena alfabéticamente sin métodos nativos
- ✅ Se imprimen los nombres ordenados con sus pesos
Archivo: tests/saucedemo-e2e.spec.ts
Descripción:
- Realiza un flujo completo de compra en Sauce Demo
- Implementa el patrón Page Object Model (POM)
- Valida cada paso del proceso de compra
- Toma capturas de pantalla en cada paso
Pasos de la prueba:
- Ingresar a la página de Sauce Demo
- Realizar login con credenciales del
.env - Localizar el producto "Sauce Labs Fleece Jacket"
- Almacenar nombre y precio del producto
- Añadir el producto al carrito
- Validar que nombre y precio coinciden en el carrito
- Completar el proceso de compra hasta la confirmación
El proyecto utiliza el patrón POM para mantener el código organizado y reutilizable:
- Pages: Contienen la lógica de interacción con cada página
- UI Locators: Centralizan los selectores de elementos
- Common: Utilidades compartidas (screenshots, helpers)
- El archivo
.envcontiene información sensible y NO debe versionarse - Las credenciales se cargan desde variables de entorno
- El archivo
.gitignoreestá configurado para excluir archivos sensibles
Solución: Verifica que el archivo .env existe y contiene BASE_URL_POKEMON
Solución: Ejecuta npx playwright install
Solución: Asegúrate de instalar las dependencias del sistema:
npx playwright install --with-deps- Todas las funciones utilizan la convención
snake_case(nombre_variable) - Los screenshots se organizan automáticamente por tipo de página
- Los reportes de Pokemon se generan con timestamp para mantener historial
- El proyecto está configurado para ejecutarse en modo no-headless por defecto
Desarrollado como parte de la prueba técnica para Ingeniero de Automatización.
ISC