Glossar · UI-Automatisierung
Implicit Wait
Englisch: Implicit wait
Auch genannt: Implicit Waits, implizites Warten, impliziter Wait, implicitlyWait
Definition
Eine globale Selenium-Einstellung, die jeden findElement-Aufruf bis zu einer festgelegten Zeit weiter pollen lässt, bevor eine NoSuchElementException geworfen wird.
Ein Implicit Wait (implizites Warten) weist WebDriver an, eine feste Zeit lang weiter nach einem Element zu suchen, bevor aufgegeben wird. Sie setzen ihn einmal pro Driver-Session, und er gilt ab dann für jeden Aufruf von findElement und findElements. „Implizit“ heißt er, weil das Warten unbemerkt in der Elementsuche stattfindet und nicht an einer Stelle, die Sie wählen. Der Standardwert ist null.
Beispiel (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 ist die Überladung mit Duration die richtige. Das ältere implicitlyWait(long, TimeUnit) ist deprecated.
Unterschied zum Explicit Wait
| Implicit Wait | Explicit Wait | |
|---|---|---|
| Geltungsbereich | Jede Elementsuche der Session | Eine Bedingung an einer Stelle im Test |
| Worauf gewartet wird | Dass das Element im DOM existiert | Jede Bedingung: sichtbar, klickbar, Text vorhanden, verschwunden |
| Wo er gesetzt wird | Einmal, am Driver | Inline, mit WebDriverWait |
Ein Implicit Wait wartet nicht darauf, dass ein Element sichtbar oder aktiviert ist. Existiert der Button, ist aber noch deaktiviert, kehrt findElement sofort zurück, und der Klick schlägt womöglich fehl oder bewirkt nichts.
Warum viele Teams ihn meiden
- Die Mischung mit Explicit Waits ist unvorhersehbar. Die Selenium-Dokumentation warnt davor, beide zu kombinieren, weil die Suchen innerhalb eines Explicit Waits ebenfalls den impliziten Timeout anwenden.
- Die Prüfung, dass etwas fehlt, wird langsam.
findElements(...).isEmpty()wartet jedes Mal den vollen impliziten Timeout ab, wenn das Element korrekterweise fehlt. - Er verschleiert die Absicht. Ein Leser kann nicht erkennen, welche Schritte tatsächlich warten müssen.
Die übliche Empfehlung lautet, den Implicit Wait auf null zu lassen und Explicit Waits dort einzusetzen, wo sie gebraucht werden. Stützt sich eine ältere Suite auf einen Implicit Wait, halten Sie ihn kurz und packen Sie keine Explicit Waits obendrauf, ohne ihn zu entfernen.