Vai al contenuto
SDETRole
SDETRole

Glossario · Automazione della UI

Implicit wait (attesa implicita)

In inglese: Implicit wait

Detto anche: attesa implicita, attese implicite, implicitlyWait

Definizione

Un'impostazione globale di Selenium per cui ogni chiamata a findElement continua a cercare l'elemento fino a un tempo massimo prima di lanciare NoSuchElementException.

Un implicit wait (attesa implicita) dice a WebDriver di continuare a cercare un elemento per un tempo fisso prima di arrendersi. Lo imposti una volta per sessione del driver e da quel momento si applica a ogni chiamata a findElement e findElements. È “implicita” perché l’attesa avviene in modo silenzioso dentro la ricerca dell’elemento, invece che in un punto scelto da te. Il valore predefinito è zero.

Esempio (Selenium 4, Java)

driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

// Polls for up to 5 seconds for the element to exist in the DOM
WebElement email = driver.findElement(By.id("email"));

// findElements also waits up to 5 seconds, then returns an empty list
List<WebElement> errors = driver.findElements(By.cssSelector(".error"));

In Selenium 4 l’overload da usare è quello con Duration. Il vecchio implicitlyWait(long, TimeUnit) è deprecato.

Differenza rispetto all’explicit wait

Implicit wait Explicit wait
Ambito Ogni ricerca di elementi della sessione Una condizione in un punto preciso del test
Cosa attende Che l’elemento esista nel DOM Qualsiasi condizione: visibile, cliccabile, testo presente, scomparso
Dove si imposta Una volta, sul driver Inline, con WebDriverWait

Un implicit wait non attende che un elemento sia visibile o abilitato. Se il pulsante esiste ma è ancora disabilitato, findElement ritorna subito e il clic può fallire o non fare nulla.

Perché molti team lo evitano

  • Mescolarlo con gli explicit wait è imprevedibile. La documentazione di Selenium sconsiglia di combinarli, perché anche le ricerche dentro un explicit wait applicano il timeout implicito.
  • Verificare che qualcosa sia assente diventa lento. findElements(...).isEmpty() attende l’intero timeout implicito ogni volta che l’elemento è, giustamente, assente.
  • Nasconde l’intento. Chi legge non può capire quali step abbiano davvero bisogno di attendere.

La raccomandazione comune è lasciare l’implicit wait a zero e usare gli explicit wait dove servono. Se una suite legacy ne dipende, tienilo breve e non aggiungere explicit wait sopra senza prima rimuoverlo.

Scrivi per cercare in tutto SDETRole.

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