Sobes.tech
Middle

Nome alguns tipos de espera no Selenium e explique-os.

sobes.tech IA

Resposta da IA

  1. Esperas implícitas (Implicit Waits)

    • São configuradas uma vez para toda a sessão do WebDriver.
    • O WebDriver aguardará um determinado período de tempo antes de lançar uma exceção NoSuchElementException ao procurar um elemento.
    • O tempo de espera aplica-se a cada chamada a findElement(s).
    • Se o elemento for encontrado mais cedo, o WebDriver não aguardará até ao final.
  2. Esperas explícitas (Explicit Waits)

    • Aplicam-se a uma condição específica para um elemento concreto.
    • O WebDriver aguardará até que a condição seja satisfeita durante um tempo máximo definido.
    • Se a condição for satisfeita mais cedo, o código continua.
    • Se não for satisfeita dentro do tempo máximo, é lançada uma exceção TimeoutException.
    • Geralmente são usadas com a classe WebDriverWait e ExpectedConditions.
    // Exemplo de espera explícita
    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("myButton")));
    
  3. Esperas flexíveis (Fluent Waits)

    • Uma versão mais avançada de Esperas explícitas.
    • Permitem definir não só o tempo máximo de espera, mas também:
      • A frequência de verificação da condição (intervalo de sondagem).
      • Os tipos de exceções a ignorar durante a espera.
    // Exemplo de espera flexível
    Wait<WebDriver> wait = new FluentWait<>(driver)
            .withTimeout(Duration.ofSeconds(30))
            .pollingEvery(Duration.ofSeconds(5))
            .ignoring(NoSuchElementException.class);
    
    WebElement element = wait.until(driver -> driver.findElement(By.id("myElement")));
    

Tabela resumo:

Tipo de espera Área de aplicação Flexibilidade Tratamento de exceções Utilização
Espera implícita Toda a sessão WebDriver Baixa (tempo fixo) Automática Tempo de espera geral para todas as buscas
Espera explícita Condição específica para um elemento Alta (condição definida) Manual (TimeoutException) Espera por um estado específico do elemento
Espera flexível Condição específica para um elemento Muito alta (intervalo, ignorar) Manual (TimeoutException) Configuração mais fina da espera