Configurando Browsers e Drivers (Playwright, Selenium e Testcontainers)
Ao concluir esta lição, você será capaz de:
- Compreender como selecionar o navegador e o executável de driver adequados para a sua suíte de testes End-to-End.
- Saber como instalar e configurar o driver do navegador manualmente (
PATHou System Propertywebdriver.chrome.driver), automaticamente (via Playwright / Selenium Manager) ou em containers Docker isolados (via Testcontainers).
Esta lição assume que:
1. Selecionando o Navegador e o Executável de Driver
O executável de driver necessário depende da implementação de WebDriver (ou motor de browser do Playwright) utilizada pelos nossos testes End-to-End. Quando utilizamos nossos testes End-to-End como smoke tests (testes de fumaça para validar os fluxos críticos do sistema), na maioria das vezes um único navegador moderno (tipicamente Google Chrome / Chromium) é suficiente. Nesse cenário, podemos selecionar o navegador seguindo estas duas regras simples:
- Liberdade de ambiente dos desenvolvedores: Se os desenvolvedores da equipe puderem instalar qualquer navegador em suas máquinas de trabalho, escolhemos a implementação que suporta o navegador padrão preferido da equipe (geralmente Chrome/Chromium).
- Política corporativa de navegador: Se os desenvolvedores ou usuários finais precisarem obrigatoriamente usar um navegador específico homologado pela empresa, utilizamos a implementação que suporta exatamente aquele navegador.
A seguir, veremos como instalar e configurar o executável do driver nas abordagens clássica e moderna.
2. Instalando e Configurando o Executável do Driver (Abordagem Clássica do Selenium)
No Selenium WebDriver clássico, ao executar testes em um navegador desktop local, precisamos garantir que o binário do driver correspondente ao navegador instalado esteja disponível seguindo estes passos:
- Fazer o download do executável do driver compatível com a versão do navegador instalada na máquina.
- Extrair o arquivo compactado baixado.
- Garantir que o Selenium WebDriver encontre o executável extraído utilizando uma destas duas opções:
- Opção A: Colocar o executável extraído em um diretório listado na variável de ambiente
PATHdo sistema operacional (ex:/usr/local/binno Linux/macOS). - Opção B: Configurar explicitamente o caminho do arquivo definindo uma system property específica do navegador na inicialização dos testes.
- Opção A: Colocar o executável extraído em um diretório listado na variável de ambiente
Como os exemplos deste curso utilizam o Google Chrome, o processo manual para o ChromeDriver consiste em:
- Baixar a versão do ChromeDriver correspondente à versão do seu Chrome (através do painel Chrome for Testing).
- Descompactar o arquivo ZIP baixado.
- Garantir que o Selenium WebDriver localize o binário
chromedrivercolocando-o noPATHou definindo a propriedade de sistemawebdriver.chrome.driver:
|
|
Ou diretamente na configuração da task endToEndTest no build.gradle.kts:
|
|
3. Gerenciamento Automático de Browsers na Stack Moderna (Zero Configuração Manual)
Manter binários do chromedriver instalados manualmente em cada máquina de desenvolvedor e agente de CI/CD costumava ser uma das maiores fontes de quebra de builds quando o navegador atualizava sozinho. Na stack moderna com Gradle 9 e Kotlin 2.4, temos três soluções que eliminam completamente a instalação manual:
1. Provisionamento Automático com Playwright
O Microsoft Playwright baixa e gerencia automaticamente versões fixas e reproduzíveis dos próprios navegadores (Chromium, Firefox e WebKit) em um cache local (~/.cache/ms-playwright), garantindo que toda a equipe e o servidor de CI executem exatamente a mesma revisão binária do browser.
Podemos inclusive adicionar uma task no build.gradle.kts para instalar os browsers e dependências de sistema operacional automaticamente no CI:
|
|
2. Selenium Manager (Nativo no Selenium 4.6+)
Se você estiver usando Selenium WebDriver 4.6 ou superior, ele agora inclui nativamente o Selenium Manager embutido. Se você não configurar o chromedriver no PATH nem definir a propriedade webdriver.chrome.driver, o próprio Selenium detecta a versão do Chrome instalada na máquina, baixa o chromedriver correspondente em segundo plano e o configura automaticamente!
3. Navegadores em Containers Docker com Testcontainers
Para ambientes de CI/CD onde nenhum navegador está instalado no sistema operacional host, você também pode provisionar um container Docker com Chrome/Firefox via BrowserWebDriverContainer do Testcontainers 2.0:
|
|
Vamos resumir o que aprendemos nesta lição.
Resumo
Esta lição nos ensinou quatro pontos essenciais:
- Quando utilizamos nossos testes End-to-End como smoke tests, na maioria das vezes podemos padronizar em uma única implementação de navegador (como Chrome / Chromium).
- No Selenium clássico, garantimos que o WebDriver localize o executável do driver adicionando-o à variável de ambiente
PATHou configurando a propriedade de sistema correspondente (comowebdriver.chrome.driver). - Na stack moderna, o Playwright e o Selenium Manager baixam e gerenciam automaticamente os binários de navegador/driver compatíveis, eliminando falhas por incompatibilidade de versão.
- Em pipelines de CI/CD containerizados, podemos utilizar
--with-deps chromiumdo Playwright ouBrowserWebDriverContainerdo Testcontainers para garantir 100% de reprodutibilidade.