Testing
selenium
- Testing
- QA
- UX-UI
- docs
-
[The Selenium Browser Automation Project Selenium](https://www.selenium.dev/documentation/) -
[Cómo convertirte en un QA de Automatización Tips, recomendaciones y lecciones aprendidas - YouTube](https://www.youtube.com/watch?v=gtVF6VQPvmE)
-
- con Docker
- conceptos
- automatizar test
- automatizar y testear en navegador
- test en paralelo
-
[Grid Selenium](https://www.selenium.dev/documentation/grid/)
-
- Selenium - Temas Avanzados, Rendimiento y Ecosistema 2025
- Selenium - Guía de Entrevista Técnica y Experiencia de Uso 2025
- Selenium - Guía de Uso Práctico y Ejemplos Completos
🧠 Conceptos Clave
- Selenium es un conjunto de herramientas para automatizar navegadores web, permitiendo ejecutar pruebas funcionales, de regresión y de interfaz en entornos reales.
- Su uso es esencial en Testing de frontends, validación de UX-UI y flujos críticos en aplicaciones complejas.
- Se integra fácilmente con frameworks de pruebas como JUnit, PyTest, Mocha, Cypress o Playwright (para comparativas o migraciones).
🧩 Componentes Principales
- Selenium WebDriver: Controla los navegadores a través de comandos y scripts, soportando múltiples lenguajes (Java, Python, JavaScript, C#, Ruby, etc.).
- Selenium IDE: Herramienta visual para grabar y reproducir pruebas. Ideal para QA manuales o prototipado rápido.
- Selenium Grid: Permite ejecutar pruebas en paralelo y en múltiples entornos (browsers, sistemas operativos, versiones). Escalable y distribuido.
- Selenium Manager: Administra automáticamente drivers de navegadores, simplificando la configuración del entorno.
⚙️ Instalación y Configuración
Ejemplo en Python
pip install selenium
`
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com")
title = driver.title
print(f"Título de la página: {title}")
driver.quit()
Ejemplo en Node.js
npm install selenium-webdriver
import { Builder, By, until } from "selenium-webdriver";
const driver = await new Builder().forBrowser("chrome").build();
await driver.get("https://example.com");
const title = await driver.getTitle();
console.log("Título:", title);
await driver.quit();
🐳 Selenium con Docker
Usar contenedores permite aislar dependencias y ejecutar entornos de navegador sin overhead local.
Imagen básica
docker pull selenium/standalone-chrome
docker run -d -p 4444:4444 selenium/standalone-chrome
Accede a la consola en http://localhost:4444/ui para monitorear sesiones activas.
Ejecución distribuida (Grid)
docker network create grid
docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub
docker run -d --net grid --name chrome-node -e SE_EVENT_BUS_HOST=selenium-hub selenium/node-chrome
Permite orquestar múltiples nodos (Chrome, Firefox, Edge) en paralelo.
🧪 Mejores Prácticas
- Mantén los selectores CSS/XPath estables y semánticos (usa atributos
data-testidoaria-label). - Implementa Page Object Pattern para aislar la lógica de interacción.
- Combina Selenium con pytest, JUnit, Mocha o TestNG para assertions y reporting.
- Configura esperas explícitas (
WebDriverWait) para elementos dinámicos. - Usa capturas de pantalla automáticas en errores o para informes visuales.
🧰 Integración Continua (CI/CD)
- Ejecuta pruebas con Selenium en pipelines usando GitHub Actions, GitLab CI, Jenkins, o CircleCI.
- En entornos CI sin entorno gráfico, usa Xvfb o contenedores headless (
chrome --headless). - Configura reintentos automáticos y reportes Allure o HTML para seguimiento.
🧩 Patrones de Diseño Comunes
- Page Object Model (POM): Divide el código de prueba en clases que representan cada página o vista.
- Data-Driven Testing: Permite reutilizar pruebas con distintos datasets (CSV, JSON, DB).
- Keyword-Driven Testing: Define acciones como palabras clave reutilizables (útil en equipos no técnicos).
🚀 Casos de Uso
- Validación automática de formularios y flujos de usuario.
- Pruebas de login, registro, checkout, dashboards y componentes dinámicos.
- Comparación visual entre versiones (con librerías como Applitools o Percy).
- Monitoreo de disponibilidad o detección de errores en producción.
🔍 Recursos Recomendados
- Documentación oficial de Selenium
- Repositorio oficial en GitHub
- Curso gratuito de Selenium con Python - FreeCodeCamp
-
[Grid Selenium](https://www.selenium.dev/documentation/grid/) - hub.docker.com/r/selenium/standalone-chrome
Selenium - Fundamentos Avanzados y Ecosistema Actual 2025
- Testing
- QA
- UX-UI
- Docker
- CI-CD
- Playwright
- Cypress
-
[The Selenium Browser Automation Project Selenium](https://www.selenium.dev/documentation/) -
[Grid Selenium](https://www.selenium.dev/documentation/grid/)
🧠 Fundamentos Reforzados
- Selenium sigue siendo el estándar de facto para pruebas E2E (end-to-end) en entornos web, especialmente cuando se requiere compatibilidad con múltiples navegadores o integración con sistemas empresariales.
- El ecosistema se ha modernizado con Selenium 4 y 5, incluyendo:
- Compatibilidad completa con WebDriver BiDi (reemplazo del protocolo antiguo JSONWire).
- Soporte nativo para acciones en red, interceptación de peticiones y manipulación de cookies/sesiones.
- Un nuevo Selenium Manager para gestionar drivers automáticamente sin configuración manual.
⚙️ Arquitectura del Sistema
- Client Libraries:
APIs específicas por lenguaje (Java, Python, JavaScript, etc.) para escribir las pruebas. - WebDriver:
Protocolo estándar que permite comunicación entre el cliente y el navegador. - Browser Drivers:
Traducen las órdenes al motor del navegador (ChromeDriver, GeckoDriver, EdgeDriver). - Grid / Hub:
Ejecución distribuida y paralela de pruebas en múltiples entornos.
🧩 Integraciones Modernas
Con Docker
- Los contenedores oficiales de Selenium incluyen versiones standalone, hub y node.
- Permiten ejecutar pipelines reproducibles y paralelos sin depender del entorno del host.
- Integración directa con CI-CD y herramientas de orquestación como GitHub Actions, GitLab Runners o Jenkins agents.
Con Playwright y Cypress
- Aunque Playwright y Cypress han ganado popularidad, Selenium sigue siendo más flexible en entornos corporativos:
- Selenium puede controlar navegadores reales sin sandbox y con soporte remoto.
- Es ideal para infraestructuras híbridas o legadas.
- Playwright es más moderno y rápido, pero menos personalizable para integraciones internas.
🧰 Estrategias de Testing Avanzado
1. Page Object Model (POM)
Estructura de clases que representa páginas o vistas, desacoplando la lógica de UI de los test cases.
class LoginPage:
def __init__(self, driver):
self.driver = driver
def login(self, username, password):
self.driver.find_element(By.ID, "user").send_keys(username)
self.driver.find_element(By.ID, "pass").send_keys(password)
self.driver.find_element(By.ID, "submit").click()
`
2. Data Driven Testing (DDT)
Permite ejecutar el mismo test con distintos datos (CSV, JSON o DB).
@pytest.mark.parametrize("username,password", [
("admin", "1234"),
("guest", "guestpass"),
])
def test_login(driver, username, password):
page = LoginPage(driver)
page.login(username, password)
assert "Dashboard" in driver.title
3. Visual Regression Testing
Integra Selenium con librerías como Applitools Eyes, Percy o Resemble.js para comparar capturas entre builds.
⚡ Buenas Prácticas Modernas
- Mantener los selectores resistentes al cambio (
data-testid,aria-label,role). - Implementar esperas explícitas y evitar
sleep(). - Automatizar la gestión de drivers con Selenium Manager o
webdriver-manager. - Añadir reportes Allure o HTML con capturas y métricas de tiempo.
- Reutilizar flujos comunes mediante fixtures y utilidades compartidas.
- Integrar pruebas paralelas para acelerar CI/CD.
🧩 Ecosistema Actual
| Herramienta | Propósito | Integración |
|---|---|---|
| Selenium Grid 5 | Ejecución distribuida y escalable | Docker, Kubernetes |
| Selenium IDE | Grabación visual de pruebas | Chrome/Firefox |
| WebDriver BiDi | Depuración avanzada, interceptar red | Chrome, Firefox |
| pytest-selenium | Extensión de Selenium para pytest | Python |
| Selenoid / Moon | Grid optimizado en contenedores | Kubernetes |
🧪 CI/CD y Cloud Testing
- Plataformas como BrowserStack, LambdaTest o SauceLabs integran Selenium Grid como servicio.
- Ejemplo de pipeline en GitHub Actions:
name: Selenium Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
selenium:
image: selenium/standalone-chrome
ports: ['4444:4444']
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.12'
- run: pip install -r requirements.txt
- run: pytest tests/ --html=report.html
🧭 Pruebas Complementarias
- Pruebas de rendimiento: combinando Selenium con herramientas como Lighthouse CI o WebPageTest API.
- Pruebas de accesibilidad: con librerías como axe-core integradas en scripts Selenium.
- Pruebas de compatibilidad móvil: usando Appium, extensión de Selenium para apps móviles nativas o híbridas.
🧩 Monitoreo y Observabilidad
- Selenium puede integrarse con Prometheus o Grafana para medir tiempos de ejecución y disponibilidad de flujos.
-
Las métricas comunes:
- Tiempo total de ejecución
- Errores por tipo
- Elementos no encontrados
- Capturas automáticas ante fallo
🚀 Hacia Dónde Evoluciona Selenium
- Integración profunda con WebDriver BiDi (para debugging, logs, interceptación y eventos).
- Soporte oficial para Edge, Safari y Chrome con actualizaciones paralelas.
- Plugins para VSCode y JetBrains que permiten ejecutar tests directamente desde el IDE.
- Integración con inteligencia artificial (auto-reparación de selectores y sugerencias de mantenimiento de test).
🔗 Recursos y Aprendizaje Continuo
- Documentación oficial Selenium 5
- WebDriver BiDi Draft Specification
- pytest-selenium plugin
- Applitools Visual AI
🧾 Próximos pasos y temas para nuevas notas
- Appium - Automatización móvil con Selenium
- WebDriver BiDi - Arquitectura moderna del protocolo
- Testing visual automatizado con Applitools y Selenium
- Selenium en Kubernetes y Grid distribuido
- AI-assisted test automation
¿Te gusta este contenido? Suscríbete vía RSS