Estratégias de Espera no Selenium WebDriver com Java

Espera com Thread.sleep()

A primeira abordagem é o uso do método estático Thread.sleep(), que pausa a execução da thread atual por um tempo determinado em milissegundos. Essa espera é rígida e não depende de nenhum estado do navegador ou elemento.

// Pausa a execução por 3 segundos
Thread.sleep(3000);
// Fecha completamente o driver e a sessão
driver.quit();

Embora simples, essa estratégia não é recomendada para automação robusta, pois impõe uma espera fixa mesmo quando o elemento já estiver disponível, aumentando desnecessariamente o tempo de execução dos testes. É mais útil em fases de depuração.

Espera Implícita (Implicit Wait)

A espera implícita define um tempo máximo global para o WebDriver procurar um elemento no DOM caso ele não seja encontrado imediatamente. Durante esse período, o driver verifica periodicamente a presença do elemanto.

System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe");
driver = new ChromeDriver();

// Define uma espera implícita de até 10 segundos para todos os elementos
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

Essa configuração se aplica a todas as chamadas subsequentes de findElement(). Se o elemento for encontrado antes do tempo limite, a execução prossegue imediatamenet. Caso contrário, após exceder o tempo, será lançada uma NoSuchElementException.

Vantagens: fácil de configurar e aplicável globalmente. Desvantagem: pode mascarar problemas de sincronização e não é eficaz para situações onde se espera por condições específicas, como visibilidade ou clicabilidade.

Espera Explícita (Explicit Wait)

A espera explícita permite definir condições personalizadas e tempos de espera específicos para determinados elementos. Usa a classe WebDriverWait combinada com predicados do ExpectedConditions para aguardar estados desejados.

driver.get("http://www.baidu.com");

// Cria uma ação de mouse para interagir com elementos
Actions actions = new Actions(driver);
WebElement moreProducts = driver.findElement(By.xpath("//a[text()='Mais Produtos']"));
actions.moveToElement(moreProducts).perform();

// Aguarda até que o link 'Todos os Produtos >>' esteja presente no DOM
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//a[text()='Todos os Produtos >>']")));

// Após o elemento estar presente, clica no item 'Música'
WebElement musicLink = driver.findElement(By.xpath("//a[text()='Música']"));
musicLink.click();

// Valida o título da página carregada
assertEquals("Música MilMil - Ouça o Mundo", driver.getTitle());

Outro exemplo comum:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

// Aguarda até que o elemento especificado esteja presente no DOM
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("elemento-id")));

A espera explícita é a técnica mais flexível e confiável. Por padrão, ela verifica a condição a cada 500 ms. É especialmente útil para esperar por elementos dinâmicos, animações ou requisições assíncronas (como AJAX).

Recomenda-se priorizar a espera explícita em testes automatizados, pois oferece maior precisão, reduz falhas esporádicas e melhora a manutenção dos scripts.

Tags: Selenium WebDriverWait java Test Automation Explicit Wait

Publicado em 9-13 14:45