Guia de Automação Web com Selenium e Python

No cenário atual de testes de software, o Selenium continua sendo uma das ferramentas mais robustas para automação de navegadores, dividindo o mercado com tecnologias emergentes como Playwright e Cypress.

Configuração do Ambiente de Automação

Para iniciar o desenvolvimento, é necessária a integração entre Python, a biblioteca Selenium, um navegador web e seu respectivo driver (que deve ser compatível com a versão instalada do browser).

O executável do driver (como chromedriver.exe ou geckodriver.exe) deve ser adicionado ao diretório Scripts da sua instalação do Python ou em uma pasta contida no PATH do sistema. Evite colocá-lo dentro de ambientes virtuais do PyCharm para garantir a persisstência global.

Configurações Específicas para Internet Explorer

O uso do IE requer ajustes rigorosos de segurança e registro:

  • Zonas de Segurança: Em Opções de Internet, todas as quatro zonas devem ter o "Modo Protegido" configurado da mesma forma (todos marcados ou todos desmarcados).
  • Nível de Zoom: Deve estar obrigatoriamente em 100%.
  • Modo Protegido Avançado: Para IE10+, desative a Proteção Avançada nas configurações de "Avançado".
  • Registro do Windows (IE11): É necessário criar uma chave DWORD chamada iexplore.exe com valor 0 no caminho: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE (Para sistemas 64 bits, verifique também em Wow6432Node).
from selenium import webdriver

# Inicializando o Internet Explorer com configurações básicas
web_driver = webdriver.Ie()
web_driver.get("https://www.google.com")

# Localizando a barra de pesquisa e interagindo
campo_busca = web_driver.find_element("name", "q")
campo_busca.send_keys("Selenium WebDriver")
campo_busca.submit()

print(f"Título da página: {web_driver.title}")
web_driver.quit()

Principais Interações com o Navegador

O Selenium fornece uma API completa para simular o comportamento do usuário:

Método Funcionalidade
maximize_window() Expande a janela para tela cheia.
get(url) Navega para um endereço específico.
refresh() Recarrega a página atual.
back() / forward() Navega no histórico de navegação.
current_url Retorna o link da página ativa.
page_source Acessa o código HTML bruto.
switch_to.alert Foca em janelas de alerta do sistema.

Estratégias de Localização de Elementos

O sucesso da automação depende da precisão na identificação dos elementos no DOM. As principais estratégias são:

  • ID e Name: Os mais rápidos e recomendados por serem, geralmente, únicos.
  • Class Name: Útil para grupos de elementos (não aceita nomes compostos).
  • XPath: Extremamente flexível, permitindo navegação absoluta ou relativa.
  • CSS Selector: Muitas vezes mais rápido que o XPath para seletores complexos.

Exemplos de XPath

  • Relativo por Atributo: //input[@type='submit']
  • Contenção de Texto: //button[contains(text(), 'Enviar')]
  • Início de Texto: //*[starts-with(@id, 'user_')]

Manipulação de Iframes

Elementos dantro de um iframe não são acessíveis diretamente. É preciso "entrar" no contexto do frame antes de interagir com o conteúdo interno.

from selenium.webdriver.common.by import By

# Mudando para o iframe via ID ou Index
navegador.switch_to.frame("id_do_frame")

# Realizando ações internas
navegador.find_element(By.ID, "botao_interno").click()

# Retornando ao conteúdo principal da página
navegador.switch_to.default_content()

Gestão de Esperas (Waits)

A sincronização é o maior desafio na automação web. Existem três abordagens principais:

1. Espera Explícita (Recomendada)

Aguarda uma condição específica ser atendida antes de prosseguir.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

aguardar = WebDriverWait(navegador, 15)
elemento = aguardar.until(EC.element_to_be_clickable((By.ID, "btn-confirmar")))
elemento.click()

2. Espera Implícita

Define um tempo global para o WebDriver tentar localizar elementos antes de lançar uma exceção.

# Aplica-se a todo o ciclo de vida do driver
navegador.implicitly_wait(8)

3. Espera Forçada (Não recomendada)

Pausa a execução do script por um tempo fixo, independentemente do estado da página.

import time
time.sleep(5)

Tratamento de Dropdowns (Select)

Para campos de seleção padrão HTML, utiliza-se a classe Select.

from selenium.webdriver.support.ui import Select

menu_dropdown = Select(navegador.find_element(By.NAME, "opcoes_cidade"))
menu_dropdown.select_by_visible_text("São Paulo")
# Ou pelo valor do atributo
menu_dropdown.select_by_value("sp_01")

Page Object Model (POM)

Para projetos escaláveis, utiliza-se o padrão POM, onde cada página da aplicação é representada por uma classe. Isso separa a lógica do teste da estrutura da página, facilitando a manutenção quando o layout da aplicação sofre alterações.

  • Classes: Representam as páginas.
  • Atributos: Armazenam os localizadores dos elementos.
  • Métodos: Definem as ações possíveis na página.

Tags: Selenium Python WebDriver web-automation software-testing

Publicado em 10-31 06:34