Zum Inhalt springen
SDETRole
SDETRole

Glossar · UI-Automatisierung

Explicit Wait

Englisch: Explicit wait

Auch genannt: Explicit Waits, explizites Warten, expliziter Wait, WebDriverWait

Definition

Ein Wait, der bis zu einem Timeout auf eine bestimmte Bedingung pollt, etwa bis ein Element klickbar ist. In Selenium wird er mit WebDriverWait geschrieben.

Ein Explicit Wait (explizites Warten) hält einen Test an, bis eine bestimmte Bedingung erfüllt ist. Er prüft wiederholt und schlägt mit einem Timeout fehl, wenn die Bedingung nie eintritt. „Explizit“ heißt er, weil Sie ihn genau an der Stelle schreiben, an der der Test warten muss, und angeben, worauf gewartet wird. In Selenium 4 bedeutet das WebDriverWait in Kombination mit einer Bedingung aus ExpectedConditions oder einem Lambda.

Beispiel (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 pollt standardmäßig alle 500 ms und ignoriert dabei NotFoundException. Für ein anderes Intervall oder zusätzliche ignorierte Exceptions verwenden Sie FluentWait (withTimeout, pollingEvery, ignoring).

Unterschied zum Implicit Wait

Ein Implicit Wait ist eine einzelne globale Einstellung, die jeden findElement-Aufruf so lange pollen lässt, bis das Element existiert. Über Sichtbarkeit, Klickbarkeit oder Text weiß er nichts. Ein Explicit Wait zielt auf eine Bedingung an einer Stelle im Test und kann daher genau auf den Zustand warten, den Sie brauchen, etwa bis ein Spinner verschwindet oder ein Button aktiviert ist.

Die Selenium-Dokumentation rät davon ab, beide zu mischen, weil kombinierte Timeouts zu unvorhersehbaren Wartezeiten führen können. Die meisten Teams setzen den Implicit Wait auf null und verwenden überall Explicit Waits.

Häufige Fehler

  • Thread.sleep statt eines Waits. Ein fester Sleep ist je nach Maschine entweder zu kurz (flaky) oder zu lang (langsam) – meist beides.
  • Auf Präsenz warten, wenn Sichtbarkeit gebraucht wird. presenceOfElementLocated ist erfüllt, sobald der Knoten im DOM ist, auch wenn er verborgen ist.
  • Ein WebElement über ein Re-Rendering hinweg festhalten. Warten Sie auf einen By-Locator, damit das Element nach der DOM-Änderung neu gefunden wird.
  • In jedem Helper einen neuen Wait mit riesigem Timeout erzeugen. Zentralisieren Sie einen sinnvollen Standardwert in Ihrem Framework.

Tippen Sie, um SDETRole zu durchsuchen.

Volltextsuche mit Pagefind · läuft in Ihrem Browser Suchseite öffnen →