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 GridCon Grid
1 navegador a la vezMultiples navegadores simultáneamente
Ejecucion secuencialEjecucion paralela
Un solo OSMultiples OS
100 tests × 2 min = 200 min100 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

ProveedorNavegadoresDispositivos RealesPrecio
BrowserStack3,000+SiDesde $29/mes
Sauce Labs2,000+SiDesde $39/mes
LambdaTest3,000+SiDesde $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

  1. Crea un Docker Compose con Hub, 2 nodos Chrome, 1 nodo Firefox
  2. Inicia el grid y verifica que todos los nodos aparezcan
  3. Modifica un test existente para usar RemoteWebDriver apuntando al grid
  4. Ejecuta el mismo test en Chrome y Firefox
  5. Ejecuta tests en paralelo con pytest-xdist
  6. 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