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-testid o aria-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

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

  1. Client Libraries:
    APIs específicas por lenguaje (Java, Python, JavaScript, etc.) para escribir las pruebas.
  2. WebDriver:
    Protocolo estándar que permite comunicación entre el cliente y el navegador.
  3. Browser Drivers:
    Traducen las órdenes al motor del navegador (ChromeDriver, GeckoDriver, EdgeDriver).
  4. 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


🧾 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