Lección 6 de 6 · 3 min
Selenium Grid, Docker y escala
El problema de "en mi máquina pasa"
Tu suite corre en tu Chrome, con tu resolución y tus extensiones. El CI corre otro Chrome, sin cabeza, en Linux. Los contenedores eliminan esa diferencia: el mismo entorno, siempre, en todas partes.
Selenium en Docker, versión mínima
# docker-compose.yml
services:
chrome:
image: selenium/standalone-chrome:latest
ports: ["4444:4444"]
shm_size: 2gb # sin esto, Chrome crashea con páginas pesadas
# El test se conecta como Remote en vez de local
driver = webdriver.Remote(
command_executor="http://localhost:4444/wd/hub",
options=webdriver.ChromeOptions(),
)
docker compose up y tienes un Chrome idéntico al de cualquier compañero o pipeline. El shm_size no es opcional: es la causa #1 de crashes misteriosos de Chrome en Docker.
Grid: multi-navegador y paralelo real
Cuando necesitas Chrome + Firefox + Edge, o más paralelismo del que aguanta una máquina:
services:
selenium-hub:
image: selenium/hub:latest
ports: ["4444:4444"]
chrome:
image: selenium/node-chrome:latest
environment: [SE_EVENT_BUS_HOST=selenium-hub]
deploy: { replicas: 4 }
firefox:
image: selenium/node-firefox:latest
environment: [SE_EVENT_BUS_HOST=selenium-hub]
El hub reparte las sesiones entre nodos; pytest -n 8 contra el hub y cada worker recibe su navegador. La consola del Grid (localhost:4444) muestra las sesiones vivas — útil para diagnosticar cuellos de botella.
El pipeline completo
# .github/workflows/e2e-grid.yml (extracto)
services:
chrome:
image: selenium/standalone-chrome:latest
ports: ["4444:4444"]
steps:
- run: pytest -n 4 --html=report.html
env:
SELENIUM_REMOTE_URL: http://localhost:4444/wd/hub
Con el webdriver.Remote leyendo SELENIUM_REMOTE_URL del entorno, la misma suite corre local (Chrome directo), en Docker y en CI sin tocar código — solo cambia la variable.
Cierre del curso
Recorriste el arco completo: primer script → selectores y esperas profesionales → POM → paralelo y CI → datos deterministas → infraestructura escalable. Eso es exactamente el stack que piden los roles de QA Automation con Selenium.
Siguientes pasos naturales: Playwright pro para sumar el framework moderno, o QA con IA para escribir y mantener todo esto al doble de velocidad.
Ejercicio final
Dockeriza tu framework del curso: docker-compose.yml con standalone-chrome, la suite conectando por SELENIUM_REMOTE_URL, y el workflow de CI actualizado. Criterio de éxito: un compañero clona el repo y corre la suite completa con dos comandos.