Que Es Selenium Grid?
Selenium Grid permite ejecutar tests en multiples maquinas (nodos) en paralelo, a traves de diferentes navegadores y sistemas operativos. En vez de ejecutar 100 tests secuencialmente en una maquina (2 horas), puedes ejecutarlos en 10 nodos en paralelo (12 minutos).
Por Que Necesitas Grid
| Sin Grid | Con Grid |
|---|---|
| 1 navegador a la vez | Multiples navegadores simultáneamente |
| Ejecucion secuencial | Ejecucion paralela |
| Un solo OS | Multiples OS |
| 100 tests × 2 min = 200 min | 100 tests ÷ 10 nodos = 20 min |
Arquitectura de Selenium Grid 4
┌─────────────────────────────────────┐
│ Selenium Grid │
│ ┌──────────┐ ┌──────────────┐ │
│ │ Router │ │ Distributor │ │
│ └────┬─────┘ └──────┬───────┘ │
│ ┌────┴─────┐ ┌──────┴───────┐ │
│ │ Session │ │ Node │ │
│ │ Map │ │ Manager │ │
│ └──────────┘ └──────────────┘ │
└─────────────────────────────────────┘
│ │
┌────┴────┐ ┌────┴────┐
│ Node 1 │ │ Node 2 │
│ Chrome │ │ Firefox │
└─────────┘ └─────────┘
Componentes:
- Router — punto de entrada, recibe solicitudes WebDriver
- Distributor — asigna sesiones a Nodes disponibles
- Session Map — rastrea que Node posee que sesion
- Node — ejecuta navegadores y tests
Configuracion de Selenium Grid
Modo Standalone (Una Maquina)
java -jar selenium-server-4.18.0.jar standalone
Grid disponible en http://localhost:4444.
Modo Hub y Node (Multiples Maquinas)
# En la maquina hub
java -jar selenium-server-4.18.0.jar hub
# En maquina nodo 1
java -jar selenium-server-4.18.0.jar node --hub http://hub-ip:4444
Conectando Tests al Grid
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.browser_version = "latest"
driver = webdriver.Remote(
command_executor="http://localhost:4444",
options=options
)
driver.get("https://app.example.com")
driver.quit()
Selenium Grid con Docker
Docker es la forma recomendada de ejecutar Selenium Grid.
Configuracion con Docker Compose
version: "3"
services:
selenium-hub:
image: selenium/hub:4.18.0
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
chrome-node:
image: selenium/node-chrome:4.18.0
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_MAX_SESSIONS=4
deploy:
replicas: 2
firefox-node:
image: selenium/node-firefox:4.18.0
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
docker compose up -d
docker compose up -d --scale chrome-node=5
open http://localhost:4444/ui
Ejecucion Paralela de Tests
pytest (Python)
pip install pytest-xdist
pytest tests/ -n 4 # 4 workers paralelos
WebdriverIO (JavaScript)
exports.config = {
maxInstances: 10,
capabilities: [
{ browserName: 'chrome', maxInstances: 5 },
{ browserName: 'firefox', maxInstances: 3 },
],
};
Proveedores de Grid en la Nube
| Proveedor | Navegadores | Dispositivos Reales | Precio |
|---|---|---|---|
| BrowserStack | 3,000+ | Si | Desde $29/mes |
| Sauce Labs | 2,000+ | Si | Desde $39/mes |
| LambdaTest | 3,000+ | Si | Desde $15/mes |
Integracion con BrowserStack
options = webdriver.ChromeOptions()
options.set_capability('bstack:options', {
'os': 'Windows',
'osVersion': '11',
'browserVersion': 'latest',
'projectName': 'E-Commerce Tests',
})
driver = webdriver.Remote(
command_executor=f'https://{USERNAME}:{ACCESS_KEY}@hub-cloud.browserstack.com/wd/hub',
options=options
)
Monitoreo y Debugging del Grid
Dashboard UI
Accede a http://localhost:4444/ui para ver: nodos conectados, sesiones activas, longitud de cola, estado de salud.
Grabacion de Video
chrome-node:
image: selenium/node-chrome:4.18.0
volumes:
- ./videos:/opt/selenium/assets
environment:
- SE_RECORD_VIDEO=true
Ejercicio: Configura un Selenium Grid
- Crea un Docker Compose con Hub, 2 nodos Chrome, 1 nodo Firefox
- Inicia el grid y verifica que todos los nodos aparezcan
- Modifica un test existente para usar RemoteWebDriver apuntando al grid
- Ejecuta el mismo test en Chrome y Firefox
- Ejecuta tests en paralelo con pytest-xdist
- Compara tiempos: secuencial vs paralelo
Puntos Clave
- Selenium Grid habilita ejecucion paralela y distribuida entre navegadores y maquinas
- Docker Compose es la forma mas facil de configurar y gestionar un Grid
- Grid 4 tiene arquitectura modernizada con Router, Distributor, Session Map y Nodes
- Proveedores cloud ofrecen grids gestionados para escala empresarial
- La ejecucion paralela puede reducir el tiempo del suite en 80-90%
- Siempre monitorea la salud del Grid a traves del dashboard