Saltar al contenido
SDETRole
SDETRole

Glosario · Automatización de UI

Selenium Grid

También llamado: Selenium Grid 4, grid de Selenium

Definición

Servidor de Selenium que enruta sesiones de WebDriver a nodos de navegador remotos para ejecutar tests en paralelo en muchos navegadores, versiones y máquinas.

Selenium Grid permite que un test cree su navegador en otro lugar. El test usa RemoteWebDriver y lo apunta a la URL del Grid; el Grid busca un nodo con un navegador que coincida (por ejemplo, Chrome en Linux), inicia allí una sesión y retransmite cada comando. Como muchos nodos pueden atender sesiones a la vez, Grid es la forma clásica de ejecutar una suite de Selenium en paralelo y en varios navegadores.

Ejemplo

Arranca un Grid en una sola máquina con la imagen oficial de Docker:

docker run -d -p 4444:4444 --shm-size="2g" selenium/standalone-chrome

Después conéctate desde un test (Selenium 4, Java 21):

ChromeOptions options = new ChromeOptions();
WebDriver driver = new RemoteWebDriver(
    URI.create("http://localhost:4444").toURL(), options);

driver.get("https://example.com");

Las opciones del navegador son las “capabilities” que el Grid compara con sus nodos. La interfaz del Grid en http://localhost:4444 muestra los nodos, los slots y las sesiones en curso.

Cómo se estructura (Grid 4)

Selenium Grid 4 puede funcionar en tres modos:

  • Standalone: todo en un único proceso; adecuado para uso local y jobs de CI pequeños.
  • Hub y nodos: un hub recibe las sesiones y varios nodos ejecutan los navegadores. Se inicia con java -jar selenium-server-<version>.jar hub y ... node.
  • Totalmente distribuido: los componentes internos del hub (Router, Distributor, Session Map, New Session Queue, Event Bus) se ejecutan como procesos separados, lo que encaja bien con Kubernetes.

Grid 4 también eliminó la necesidad de la antigua ruta /wd/hub, aunque la sigue aceptando.

Errores comunes

  • Esperar que Grid haga paralelos los tests. Grid proporciona navegadores. Tu test runner (JUnit 5, TestNG) debe seguir configurado para ejecutar tests de forma concurrente, y los tests deben estar aislados.
  • Más hilos que slots. Las solicitudes de sesión sobrantes se encolan y pueden agotar el tiempo de espera. Ajusta el paralelismo del runner a los slots disponibles.
  • No cerrar los drivers. Un driver.quit() olvidado deja sesiones ocupando slots hasta que expiran.
  • Memoria compartida pequeña en Docker. Chrome se cuelga con el /dev/shm por defecto del contenedor; de ahí el flag --shm-size.

Los servicios en la nube exponen el mismo endpoint de WebDriver que un Grid, así que el código con RemoteWebDriver es idéntico; solo cambian la URL y las capabilities.

Escribe para buscar en todo SDETRole.

Búsqueda de texto completo con Pagefind · se ejecuta en tu navegador Abrir la página de búsqueda →