Mira la lección en vídeo
Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.
Desbloquear Plan PlusConfiguración GitLab CI con WebDriver local
La integración de Selenium en pipelines de GitLab CI requiere un entorno controlado que simule un navegador real sin interfaz gráfica. Esta configuración permite ejecutar pruebas automatizadas de manera consistente en cada commit, garantizando la calidad del código antes de su despliegue.
Imagen Docker optimizada para Selenium
La imagen Docker markhobson/maven-chrome
proporciona un entorno preconfigurado que incluye JDK 21, Maven y Google Chrome, eliminando la complejidad de configurar manualmente estas dependencias. Esta imagen está específicamente diseñada para entornos de CI/CD y mantiene las versiones actualizadas de todos los componentes necesarios.
La configuración base del archivo .gitlab-ci.yml
establece el foundation para la ejecución automatizada:
# Imagen con JDK 21 + Maven + Chrome preinstalado
image: markhobson/maven-chrome:jdk-21
stages:
- test
# Cache para que no descargue dependencias cada vez
cache:
paths:
- .m2/repository/
variables:
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
Configuración del job de pruebas
El job de Selenium se define con artefactos que preservan los reportes de pruebas, permitiendo analizar los resultados incluso cuando las pruebas fallan:
selenium_tests:
stage: test
script:
- mvn clean test
artifacts:
when: always
reports:
junit: target/surefire-reports/TEST-*.xml
expire_in: 1 day
Esta configuración incluye caching inteligente de dependencias Maven, reduciendo significativamente los tiempos de construcción en ejecuciones posteriores. El parámetro when: always
garantiza que los reportes se generen independientemente del resultado de las pruebas.
Configuración del WebDriver para CI
La configuración del ChromeDriver en modo headless es esencial para la ejecución en contenedores sin interfaz gráfica. El navegador debe configurarse con opciones específicas que optimicen su rendimiento en este entorno:
@BeforeEach
void configurarWebDriver() {
ChromeOptions opciones = new ChromeOptions();
opciones.setHeadless(true);
opciones.addArguments("--no-sandbox");
opciones.addArguments("--disable-dev-shm-usage");
opciones.addArguments("--disable-gpu");
opciones.addArguments("--window-size=1920,1080");
driver = new ChromeDriver(opciones);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
}
Optimizaciones específicas para contenedores
Las opciones adicionales del navegador abordan limitaciones específicas de los entornos containerizados. La opción --no-sandbox
desactiva el sandbox de Chrome, necesario cuando se ejecuta como usuario root en contenedores Docker.
La configuración --disable-dev-shm-usage
evita problemas de memoria relacionados con el uso compartido de memoria en sistemas con /dev/shm
limitado, común en algunos runners de GitLab CI.
@Test
void validarConfiguracionCI() {
driver.get("https://example.com");
// Verificar que el driver funciona correctamente en CI
String titulo = driver.getTitle();
assertThat(titulo).isNotEmpty();
// Verificar resolución de pantalla configurada
Dimension tamaño = driver.manage().window().getSize();
assertThat(tamaño.getWidth()).isEqualTo(1920);
assertThat(tamaño.getHeight()).isEqualTo(1080);
}
Variables de entorno para flexibilidad
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
El uso de variables de entorno permite adaptar la configuración según diferentes contextos de ejecución sin modificar el código:
@BeforeEach
void configurarWebDriverConVariables() {
ChromeOptions opciones = new ChromeOptions();
// Determinar modo headless desde variable de entorno
boolean headless = Boolean.parseBoolean(
System.getenv().getOrDefault("HEADLESS", "true")
);
opciones.setHeadless(headless);
// Configurar timeout desde variable de entorno
String timeout = System.getenv().getOrDefault("IMPLICIT_WAIT", "10");
driver = new ChromeDriver(opciones);
driver.manage().timeouts()
.implicitlyWait(Duration.ofSeconds(Long.parseLong(timeout)));
}
Esta aproximación facilita la ejecución local con interfaz gráfica durante el desarrollo, mientras mantiene el modo headless para CI/CD.
Gestión de recursos y cleanup
La gestión adecuada de recursos es crítica en entornos de CI donde los recursos son limitados. El patrón de cleanup debe garantizar que el WebDriver se cierre correctamente:
@AfterEach
void limpiarRecursos() {
Optional.ofNullable(driver)
.ifPresent(WebDriver::quit);
}
@AfterAll
static void limpiezaGlobal() {
// Verificar que no queden procesos Chrome zombie
System.gc();
}
La configuración resultante proporciona un entorno robusto para la ejecución de pruebas Selenium en GitLab CI, balanceando rendimiento, estabilidad y facilidad de mantenimiento.
Aprendizajes de esta lección de Selenium
- Comprender cómo integrar Selenium en pipelines de GitLab CI para pruebas automatizadas.
- Configurar un entorno Docker optimizado con JDK, Maven y Chrome para CI/CD.
- Implementar la configuración adecuada del WebDriver en modo headless para entornos sin interfaz gráfica.
- Aplicar optimizaciones específicas para contenedores Docker en la ejecución de pruebas.
- Gestionar variables de entorno y recursos para flexibilizar y asegurar la estabilidad de las pruebas en CI.
Completa este curso de Selenium y certifícate
Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs