Sobes.tech
Middle

Uveďte několik typů čekání v Selenium a vysvětlete je.

sobes.tech AI

Odpověď od AI

  1. Implicitní čekání (Implicit Waits)

    • Konfigurují se jednou pro celou relaci WebDriver.
    • WebDriver bude čekat určitou dobu, než vyhodí výjimku NoSuchElementException př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.
  2. 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 WebDriverWait a ExpectedConditions.
    // Příklad explicitního čekání
    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("myButton")));
    
  3. 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í