Sobes.tech
Middle

Nominare alcuni tipi di attesa in Selenium e spiegarli.

sobes.tech AI

Risposta dell'AI

  1. Attese implicite (Implicit Waits)

    • Si configurano una volta per tutta la sessione WebDriver.
    • WebDriver aspetterà un certo periodo di tempo prima di lanciare un'eccezione NoSuchElementException durante la ricerca di un elemento.
    • Il tempo di attesa si applica a ogni chiamata a findElement(s).
    • Se l'elemento viene trovato prima, WebDriver non aspetterà fino alla fine.
  2. Attese esplicite (Explicit Waits)

    • Si applicano a una condizione specifica per un elemento concreto.
    • WebDriver aspetterà che la condizione sia soddisfatta per un tempo massimo stabilito.
    • Se la condizione si verifica prima, il codice continua.
    • Se non si verifica entro il tempo massimo, viene sollevata un'eccezione TimeoutException.
    • Generalmente si usano con la classe WebDriverWait e ExpectedConditions.
    // Esempio di attesa esplicita
    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("myButton")));
    
  3. Attese fluenti (Fluent Waits)

    • Una versione più avanzata delle Attese esplicite.
    • Permettono di definire non solo il tempo massimo di attesa, ma anche:
      • La frequenza di verifica della condizione (intervallo di polling).
      • I tipi di eccezioni da ignorare durante l'attesa.
    // Esempio di attesa fluente
    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")));
    

Tabella riassuntiva:

Tipo di attesa Ambito di applicazione Flessibilità Gestione delle eccezioni Utilizzo
Attesa implicita Intera sessione WebDriver Bassa (tempo fisso) Automatica Tempo di attesa generale per tutte le ricerche
Attesa esplicita Condizione specifica per un elemento Alta (condizione definita) Manuale (TimeoutException) Attesa di uno stato specifico dell'elemento
Attesa fluente Condizione specifica per un elemento Molto alta (intervallo, ignorare) Manuale (TimeoutException) Configurazione più fine dell'attesa