Middle
Uveďte několik typů čekání v Selenium a vysvětlete je.
sobes.tech AI
Odpověď od AI
-
Implicitní čekání (Implicit Waits)
- Konfigurují se jednou pro celou relaci WebDriver.
- WebDriver bude čekat určitou dobu, než vyhodí výjimku
NoSuchElementExceptionpři hledání prvku. - Čas čekání se vztahuje na každý volání
findElement(s). - Pokud je prvek nalezen dříve, WebDriver nebude čekat do konce.
-
Explicitní čekání (Explicit Waits)
- Používají se na konkrétní podmínku pro určitý prvek.
- WebDriver bude čekat, až bude podmínka splněna, po stanovenou maximální dobu.
- Pokud je podmínka splněna dříve, kód pokračuje.
- Pokud ne, během maximální doby, je vyhozena výjimka
TimeoutException. - Obvykle se používají s třídami
WebDriverWaitaExpectedConditions.
// Příklad explicitního čekání WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("myButton"))); -
Plynulá čekání (Fluent Waits)
- Pokročilejší verze explicitního čekání.
- Umožňují definovat nejen maximální dobu čekání, ale i:
- Frekvenci kontroly podmínky (polling interval).
- Typy výjimek, které je třeba ignorovat během čekání.
// Příklad plynulého čekání Wait<WebDriver> wait = new FluentWait<>(driver) .withTimeout(Duration.ofSeconds(30)) .pollingEvery(Duration.ofSeconds(5)) .ignoring(NoSuchElementException.class); WebElement element = wait.until(driver -> driver.findElement(By.id("myElement")));
Souhrnná tabulka:
| Typ čekání | Oblast použití | Flexibilita | Zpracování výjimek | Použití |
|---|---|---|---|---|
| Implicitní čekání | Celá relace WebDriver | Nízká (pevný čas) | Automatické | Obecný čas čekání pro všechna hledání |
| Explicitní čekání | Konkrétní podmínka pro prvek | Vysoká (definovaná podmínka) | Ruční (TimeoutException) |
Čekání na specifický stav prvku |
| Plynulé čekání | Konkrétní podmínka pro prvek | Velmi vysoká (interval, ignorovat) | Ruční (TimeoutException) |
Jemnější nastavení čekání |