Estratégias de Espera no Selenium WebDriver

A forma mais simples de implementar uma pausa na execução é utilizar o método time.sleep(), que suspende a execução por um período determinado de segundos:

time.sleep(5) # Pausa a execução por 5 segundos


</div>Essa abordagem é direta porém não é recomendada para uso geral, pois pode ralentar desnecessariamente os testes ou ser insuficiente para carregamentos mais lentos.

2. Espera Implícita (Implicit Wait)
-----------------------------------

A espera implícita é configurada uma única vez e se aplica a todas as buscas de elementos realizadas pelo driver. Quando definida, o WebDriver aguardará o tempo especificado antes de lançar uma exceção caso o elemento não seja encontrado:

<div>```
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)  # Espera até 10 segundos em cada busca de elemento

  1. Espera Explícita (Explicit Wait)

A espera explícita é a abordagem mais flexível e recomendada. Ela permite aguardar condições específicas serem satisfeitas para um elemento particular, oferecendo maior controle sobre o fluxo de execução.

Método 1: Utilizando Funções Lambda

driver = webdriver.Chrome() driver.get("https://www.exemplo.com")

espera = WebDriverWait(driver, timeout=10, poll_frequency=0.5)

Aguarda até que o elemento esteja presente e executa ação

elemento = espera.until(lambda d: d.find_element(By.XPATH, '//button[@id="submit"]')) elemento.click()

Outro exemplo: digitando em um campo

campo = espera.until(lambda d: d.find_element(By.NAME, 'username')) campo.send_keys("usuario_teste")


</div>### Método 2: Utilizando Expected Conditions

O módulo `expected_conditions` oferece condições pré-definidas que facilitam a verificação de estados de elementos na página. Existem 16 condições disponíveis:

- **title\_is:** Verifica se o título da página é exatamente igual ao texto esperado
- **title\_contains:** Verifica se o título contém o texto esperado
- **presence\_of\_element\_located:** Verifica se um elemento existe no DOM (pode não ser visível)
- **visibility\_of\_element\_located:** Verifica se o elemento é visível (não escondido e com dimensões maiores que zero)
- **visibility\_of:** Similar ao anterior, mas recebe o elemento já localizado
- **presence\_of\_all\_elements\_located:** Verifica se pelo menos um elemento existe na página
- **text\_to\_be\_present\_in\_element:** Verifica se o texto do elemento contém a string esperada
- **text\_to\_be\_present\_in\_element\_value:** Verifica se o atributo value contém a string esperada
- **frame\_to\_be\_available\_and\_switch\_to\_it:** Verifica se o frame está disponível e alterna para ele
- **invisibility\_of\_element\_located:** Verifica se o elemento não existe ou está invisível
- **element\_to\_be\_clickable:** Verifica se o elemento está visível e habilitado para interação
- **staleness\_of:** Verifica se o elemento foi removido do DOM
- **element\_to\_be\_selected:** Verifica se o elemento está selecionado
- **element\_selection\_state\_to\_be:** Verifica se o estado de seleção corresponde ao esperado
- **element\_located\_selection\_state\_to\_be:** Similar ao anterior, mas recebe o localizador
- **alert\_is\_present:** Verifica se um alerta está presente na página

Exemplo prático utilizando expected conditions:

<div>```
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.exemplo.com")

espera = WebDriverWait(driver, timeout=10, poll_frequency=0.5)

# Aguarda o elemento estar presente no DOM
localizador = (By.XPATH, '//input[@name="email"]')
elemento = espera.until(EC.presence_of_element_located(localizador))
elemento.send_keys("teste@exemplo.com")

# Aguarda o elemento ser clicável
botao = espera.until(EC.element_to_be_clickable((By.ID, "enviar")))
botao.click()

Tags: Selenium Python WebDriver automacao-de-testes wait

Publicado em 8-26 21:01