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 (PATH ou System Property webdriver.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:

  1. Fazer o download do executável do driver compatível com a versão do navegador instalada na máquina.
  2. Extrair o arquivo compactado baixado.
  3. 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 PATH do sistema operacional (ex: /usr/local/bin no Linux/macOS).
    • Opção B: Configurar explicitamente o caminho do arquivo definindo uma system property específica do navegador na inicialização dos testes.

Como os exemplos deste curso utilizam o Google Chrome, o processo manual para o ChromeDriver consiste em:

  1. Baixar a versão do ChromeDriver correspondente à versão do seu Chrome (através do painel Chrome for Testing).
  2. Descompactar o arquivo ZIP baixado.
  3. Garantir que o Selenium WebDriver localize o binário chromedriver colocando-o no PATH ou definindo a propriedade de sistema webdriver.chrome.driver:
1
2
// Definindo via System Property antes de instanciar o ChromeDriver:
System.setProperty("webdriver.chrome.driver", "/caminho/para/chromedriver")

Ou diretamente na configuração da task endToEndTest no build.gradle.kts:

1
2
3
tasks.named<Test>("endToEndTest") {
    systemProperty("webdriver.chrome.driver", System.getenv("CHROME_DRIVER_PATH") ?: "/usr/local/bin/chromedriver")
}

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:

1
2
3
4
5
6
7
tasks.register<JavaExec>("installPlaywrightBrowsers") {
    description = "Baixa os binários de navegador do Playwright para testes E2E"
    group = "verification"
    classpath = sourceSets["endToEndTest"].runtimeClasspath
    mainClass.set("com.microsoft.playwright.CLI")
    args("install", "--with-deps", "chromium")
}

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:

1
2
3
// Exemplo de container de browser reproduzível via Testcontainers
val chromeContainer = BrowserWebDriverContainer("selenium/standalone-chromium:latest")
    .withAccessToHost(true) // Permite acessar http://host.testcontainers.internal:<porta>

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 PATH ou configurando a propriedade de sistema correspondente (como webdriver.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 chromium do Playwright ou BrowserWebDriverContainer do Testcontainers para garantir 100% de reprodutibilidade.