Vai al contenuto
SDETRole
SDETRole

Glossario · Automazione della UI

Explicit wait (attesa esplicita)

In inglese: Explicit wait

Detto anche: attesa esplicita, attese esplicite, WebDriverWait, FluentWait

Definizione

Un'attesa che verifica ripetutamente una condizione specifica, per esempio che un elemento diventi cliccabile, fino a un timeout. In Selenium si scrive con WebDriverWait.

Un explicit wait (attesa esplicita) mette in pausa un test finché una determinata condizione non diventa vera, controllandola ripetutamente e fallendo con un timeout se la condizione non si verifica mai. È “esplicita” perché la scrivi esattamente nel punto in cui il test deve attendere e dichiari cosa attendere. In Selenium 4 significa WebDriverWait combinato con una condizione di ExpectedConditions o con una lambda.

Esempio (Selenium 4, Java)

import java.time.Duration;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

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

WebElement save = wait.until(
    ExpectedConditions.elementToBeClickable(By.id("save")));
save.click();

wait.until(ExpectedConditions.textToBePresentInElementLocated(
    By.cssSelector("[role='status']"), "Saved"));

// Any condition can be a lambda that returns a non-null or true value
wait.until(d -> d.findElements(By.cssSelector(".result-row")).size() == 20);

WebDriverWait effettua il polling ogni 500 ms per default e ignora NotFoundException durante il polling. Per un intervallo diverso o per ignorare altre eccezioni, usa FluentWait (withTimeout, pollingEvery, ignoring).

Differenza rispetto all’implicit wait

Un implicit wait è un’unica impostazione globale che fa sì che ogni chiamata a findElement ripeta la ricerca finché l’elemento non esiste. Non sa nulla di visibilità, cliccabilità o testo. Un explicit wait punta a una condizione in un preciso punto del test, quindi può attendere esattamente lo stato che ti serve, come la scomparsa di uno spinner o l’abilitazione di un pulsante.

La documentazione di Selenium sconsiglia di mescolare i due, perché la combinazione dei timeout può produrre tempi di attesa imprevedibili. La maggior parte dei team tiene l’implicit wait a zero e usa ovunque gli explicit wait.

Errori comuni

  • Thread.sleep invece di un’attesa. Una pausa fissa è o troppo breve (test instabile) o troppo lunga (test lento), e di solito entrambe le cose, a seconda della macchina.
  • Attendere la presenza quando serve la visibilità. presenceOfElementLocated passa non appena il nodo è nel DOM, anche se è nascosto.
  • Conservare un WebElement attraverso un nuovo rendering. Attendi su un locator By, così che l’elemento venga ritrovato dopo che il DOM è cambiato.
  • Creare in ogni helper una nuova attesa con un timeout enorme. Centralizza nel tuo framework un unico default ragionevole.

Scrivi per cercare in tutto SDETRole.

Ricerca full-text con Pagefind · funziona nel tuo browser Apri la pagina di ricerca →