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.execom valor0no caminho:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE(Para sistemas 64 bits, verifique também emWow6432Node).
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.