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 huby... 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/shmpor 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.