Pověz o několika druzích čekání v Selenium.
sobes.tech AI
Odpověď od AI
V Selenium Webdriver jsou používány různé typy čekání pro synchronizaci akcí skriptu s načítáním webové stránky.
-
Implicitní čekání (Implicit Wait): Nastavuje maximální dobu, po kterou se Selenium pokusí najít prvek na stránce, než vyhodí výjimku
NoSuchElementException. Je aplikováno globálně na všechny operace hledání prvků po jeho nastavení.from selenium import webdriver # Vytvoření instance ovladače driver = webdriver.Chrome() # Nastavení implicitního čekání (10 sekund) driver.implicitly_wait(10) # Další operace hledání prvků budou používat toto čekání # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Zavření ovladače # driver.quit() -
Explicitní čekání (Explicit Wait): Nastavuje maximální dobu pro provedení určité podmínky před tím, než vyhodí výjimku
TimeoutException. Je aplikováno na konkrétní prvek nebo podmínku. Pro jeho použití je nutná třídaWebDriverWaita jedna z předdefinovaných nebo přizpůsobených "čekacích podmínek" (expected conditions).from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Vytvoření instance ovladače (zde není potřeba implicitní čekání, pokud se používá explicitní) driver = webdriver.Chrome() # driver.get("http://example.com") # Nastavení explicitního čekání (10 sekund) na přítomnost prvku try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Další akce s prvkem # element.click() except: # Zpracování výjimky, pokud prvek nebyl nalezen do 10 sekund print("Prvek nebyl nalezen do 10 sekund") # Nastavení explicitního čekání na kliknutelnost prvku try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Prvek se nestal kliknutelným do 15 sekund") # Zavření ovladače # driver.quit() -
Flexibilní čekání (Fluent Wait): Podobně jako explicitní čekání, umožňuje nastavit maximální dobu čekání a podmínku. Navíc umožňuje určit interval (polling interval) pro kontrolu podmínky a seznam výjimek, které je třeba ignorovat během čekání.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Vytvoření instance ovladače driver = webdriver.Chrome() # driver.get("http://example.com") # Nastavení flexibilního čekání wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Další akce s prvkem # element.click() except: print("Prvek nebyl nalezen pomocí flexibilního čekání") # Zavření ovladače # driver.quit()
Porovnání:
| Typ čekání | Použití | Podmínka | Flexibilita | Použití |
|---|---|---|---|---|
| Implicitní | Globální | Vyhledávání prvku | Nízká (pouze čas) | Jednoduché nastavení pro všechny prvky |
| Explicitní | Konkrétní | Určená podmínka | Vysoká (čas, podmínka) | Čekání na konkrétní stavy prvků |
| Flexibilní | Konkrétní | Určená podmínka | Nejvyšší (čas, podmínka, interval, ignorování výjimek) | Složitější scénáře čekání s chybovou správou |