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
- 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()