Glossar · UI-Automatisierung
Auto-Waiting
Englisch: Auto-waiting
Auch genannt: Auto-Wait, automatisches Warten, Actionability Checks
Definition
Eine Framework-Funktion, die wartet, bis ein Element bereit ist – etwa sichtbar, stabil und aktiviert –, bevor sie damit interagiert, statt auf feste Sleeps zu setzen.
Auto-Waiting bedeutet, dass das Automatisierungsframework prüft, ob ein Element bereit ist, bevor es eine Aktion ausführt, und es so lange erneut versucht, bis das der Fall ist oder ein Timeout abläuft. Playwright und Cypress haben das eingebaut. In Playwright wartet click(), bis das Element im DOM hängt, sichtbar ist, stabil ist (keine laufende Animation), Events empfangen kann (nicht von einem anderen Element verdeckt) und aktiviert ist. Sie schreiben die Aktion; um das Timing kümmert sich das Framework.
Beispiel
import { test, expect } from '@playwright/test';
test('saves the profile', async ({ page }) => {
await page.goto('/profile');
await page.getByLabel('Display name').fill('Ada');
// Waits until the button is visible, stable, enabled and not covered
await page.getByRole('button', { name: 'Save' }).click();
// Retries until the toast appears or the expect timeout is reached
await expect(page.getByRole('status')).toHaveText('Profile saved');
});
Nirgends steht ein waitForTimeout. Ist der Speichern-Button kurz deaktiviert, während das Formular validiert, wartet der Klick, statt fehlzuschlagen.
Unterschied zu Explicit und Implicit Waits
Selenium WebDriver wartet vor Aktionen nicht automatisch. Entweder setzen Sie einen Implicit Wait, der nur beeinflusst, wie lange findElement darauf pollt, dass ein Element existiert, oder Sie schreiben einen Explicit Wait mit WebDriverWait und einer ExpectedConditions-Prüfung wie elementToBeClickable. Auto-Waiting ähnelt eher einem Explicit Wait, den das Framework bei jeder Aktion für Sie schreibt, mit Prüfungen, die zur jeweiligen Aktion passen: fill() verlangt zum Beispiel zusätzlich, dass das Element editierbar ist.
Grenzen
- Es wartet auf das Element, nicht auf Ihren fachlichen Zustand. Ist der Button klickbar, bevor die Daten geladen sind, die er absendet, hilft Auto-Waiting nicht. Prüfen Sie zuerst per Assertion den Zustand, den Sie brauchen.
- Es gilt nicht für Werte, die Sie einmalig auslesen.
await locator.textContent()liefert, was gerade da ist. Um auf Text zu warten, verwenden Sie eine Web-First-Assertion wietoHaveText. - Es kann Langsamkeit verdecken. Ein Schritt, der stets fast seinen gesamten Timeout ausschöpft, besteht zwar, ist aber ein Performance-Signal, das einen Blick in den Trace lohnt.
force: trueüberspringt die Prüfungen. Bei Custom Controls ist das gelegentlich nötig, meist kaschiert es aber ein echtes Problem.