Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Dúvida] Drive Selenium para o Jenkins

Olá,

Estou na aula 3 e encontrei um problema ao realizar o teste pelo Jenkins, o stage 2.
É como se o selenium tentasse acessar o drive para abrir o navegador constantemente, realizei as atualizações mas, ainda encontro esse problema

"ERRO tests/test_home.py::test_home - selenium.common.exceptions.NoSuchDriverException: Mensagem: Não foi possível obter o driver para o Chrome usando o Selenium Manager. Para obter documentação sobre este erro, visite: "

https://github.com/zzRaphazz/Dash

1 resposta

Olá, Raphael. Como vai?

Esse erro NoSuchDriverException é muito comum quando estamos migrando testes do Selenium que rodam perfeitamente na nossa máquina local para um ambiente de Integração Contínua (CI) como o Jenkins.

O que está acontecendo é que o Selenium Manager (a ferramenta interna do Selenium que tenta baixar o driver automaticamente) não está conseguindo localizar, baixar ou executar o binário do Google Chrome dentro do servidor onde o Jenkins está rodando.

Para resolver esse problema no seu pipeline, precisamos ajustar o seu código Python para rodar em modo Headless (sem interface gráfica) e garantir que o Jenkins tenha o ambiente correto. Veja o passo a passo para solucionar o bug:

1. Configurar o Chrome Options para Modo Headless

Servidores de Jenkins geralmente operam em ambientes Linux baseados em texto (sem monitor/interface gráfica). Se você tentar abrir o Chrome da forma tradicional, o Selenium vai quebrar porque ele não encontra uma tela para renderizar o navegador.

No seu arquivo tests/test_home.py, ajuste a inicialização do seu WebDriver adicionando os argumentos necessários para rodar em segundo plano:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def iniciar_driver():
    chrome_options = Options()
    # Linhas fundamentais para ambientes de CI (Jenkins):
    chrome_options.add_argument("--headless=new") # Roda o Chrome sem interface gráfica
    chrome_options.add_argument("--no-sandbox")   # Ignora o modelo de segurança sandbox (obrigatório para o Jenkins)
    chrome_options.add_argument("--disable-dev-shm-usage") # Evita problemas de falta de memória compartilhada
    
    driver = webdriver.Chrome(options=chrome_options)
    return driver

2. Verificar a Instalação do Navegador no Servidor Jenkins

O Selenium Manager automatiza o download do Chromedriver (o motor de testes), mas ele ainda depende que o navegador Google Chrome real esteja fisicamente instalado na máquina onde o agente do Jenkins está executando.

Se o seu Jenkins roda direto na sua máquina local ou em uma máquina virtual dedicada, certifique-se de que o Chrome está instalado nela. Se o seu Jenkins roda dentro de um container Docker, a imagem utilizada no seu Jenkinsfile precisa ter o Google Chrome instalado. Uma alternativa comum no Jenkinsfile é garantir a instalação antes de rodar os testes:

stage('Instalar Dependências do Sistema') {
    steps {
        // Exemplo para servidores baseados em Debian/Ubuntu
        sh 'sudo apt-get update && sudo apt-get install -y google-chrome-stable'
    }
}

3. Atualizar as Dependências no requirements.txt

As versões mais antigas do Selenium sofriam bastante com incompatibilidades no Selenium Manager. Garanta que você está utilizando a versão mais recente do Selenium no repositório do seu projeto para que ele consiga buscar os drivers atualizados da API do Google.

Tente aplicar a configuração das Options em modo headless no seu arquivo de testes e faça um novo commit para disparar o pipeline do Jenkins. O erro deve desaparecer!

Espero que possa ter lhe ajudado!