Glosario · Automatización de UI
Espera implícita (implicit wait)
En inglés: Implicit wait
También llamado: implicitlyWait, esperas implícitas, espera implícita Selenium
Definición
Un ajuste global de Selenium que hace que cada llamada a findElement siga buscando durante un tiempo fijo antes de lanzar NoSuchElementException.
Una espera implícita le indica a WebDriver que siga buscando un elemento durante un tiempo fijo antes de rendirse. Se configura una vez por sesión del driver y se aplica a partir de ese momento a todas las llamadas a findElement y findElements. Es “implícita” porque la espera ocurre de forma silenciosa dentro de la búsqueda del elemento, no en un punto que tú eliges. El valor predeterminado es cero.
Ejemplo (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"));
En Selenium 4, la sobrecarga con Duration es la que hay que usar. La antigua implicitlyWait(long, TimeUnit) está obsoleta.
En qué se diferencia de una espera explícita
| Espera implícita | Espera explícita | |
|---|---|---|
| Alcance | Todas las búsquedas de elementos de la sesión | Una condición en un punto de la prueba |
| Qué espera | Que el elemento exista en el DOM | Cualquier condición: visible, clicable, texto presente, desaparecido |
| Dónde se define | Una vez, en el driver | En línea, con WebDriverWait |
Una espera implícita no espera a que un elemento sea visible o esté habilitado. Si el botón existe pero sigue deshabilitado, findElement devuelve el elemento de inmediato y el clic puede fallar o no hacer nada.
Por qué muchos equipos la evitan
- Mezclarla con esperas explícitas es impredecible. La documentación de Selenium desaconseja combinarlas, porque las búsquedas dentro de una espera explícita también aplican el timeout implícito.
- Comprobar que algo no existe se vuelve lento.
findElements(...).isEmpty()espera el timeout implícito completo cada vez que el elemento, correctamente, no está. - Oculta la intención. Quien lee el código no puede saber qué pasos necesitan realmente esperar.
La recomendación habitual es dejar la espera implícita en cero y usar esperas explícitas donde hagan falta. Si una suite heredada depende de ella, mantenla corta y no añadas esperas explícitas encima sin quitarla.