Ispričaj o nekoliko vrsta čekanja u Selenium.
sobes.tech АИ
Одговор од АИ
У Selenium Webdriver се користе различите врсте очекивања за синхронизацију акција скрипте са учитавањем веб странице.
-
Намирница (Implicit Wait): Одређује максимално време у којем ће Selenium покушати да пронађе елемент на страници пре него што баци изузетак
NoSuchElementException. То се примењује глобално на све операције претраге елемената након што се подеси.from selenium import webdriver # Креирање инстанце драйвера driver = webdriver.Chrome() # Подешавање намирнице (10 секунди) driver.implicitly_wait(10) # Следеће операције претраге елемената ће користити ову намирницу # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Затварање драйвера # driver.quit() -
Јасна намирница (Explicit Wait): Одређује максимално време за извршавање одређеног услова пре него што баци изузетак
TimeoutException. То се примењује на конкретан елемент или услов. За његову употребу је потребна класаWebDriverWaitи једна од претходно дефинисаних или прилагођених "очекиваних услова" (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 # Креирање инстанце драйвера (овде није потребна намирница ако се користи јасна) driver = webdriver.Chrome() # driver.get("http://example.com") # Подешавање јасне намирнице (10 секунди) за присуство елемента try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Даље акције са елементом # element.click() except: # Обрада изузетка ако се елемент не пронађе у року од 10 секунди print("Елемент није пронађен у року од 10 секунди") # Подешавање јасне намирнице за кликабилност елемента try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Елемент није постао кликабилан у року од 15 секунди") # Затварање драйвера # driver.quit() -
Флексибилна намирница (Fluent Wait): Слична је јасној намирници, али омогућава да се постави максимално време чекања и услов. Такође, омогућава да се наведе интервал (polling interval) за проверу услова и листа изузетака које треба игнорисати током чекања.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Креирање инстанце драйвера driver = webdriver.Chrome() # driver.get("http://example.com") # Подешавање флексибилног чекања wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Даље акције са елементом # element.click() except: print("Елемент није пронађен помоћу флексибилног чекања") # Затварање драйвера # driver.quit()
Поређење:
| Врста очекивања | Примена | Услов | Флексибилност | Коришћење |
|---|---|---|---|---|
| Непосредна | Глобално | Претрага елемента | Ниска (само време) | Једноставна конфигурација за све елементе |
| Јасна | Конкретна | Одређени услов | Висока (време, услов) | Очековање одређених стања елемената |
| Флексибилна | Конкретна | Одређени услов | Највиша (време, услов, интервал, игнорисање изузетака) | Комплексни сценарији чекања са руковањем грешака |