Ejecución de Selenium en GitLab CI

Avanzado
Selenium
Selenium
Actualizado: 05/09/2025

¡Desbloquea el curso de Selenium completo!

IA
Ejercicios
Certificado
Entrar

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 Plus

Configuració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.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

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

⭐⭐⭐⭐⭐
4.9/5 valoración