Խոսեք Selenium-ում սպասման մի քանի տեսակների մասին։
sobes.tech AI
Պատասխան AI-ից
Սելենում 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դասը և կանխորոշված կամ հարմարեցված "պահանջվող պայմաններ":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()
Համեմատություն:
| Սպասման տեսակը | Օգտագործում | Պայման | Նուրբություն | Օգտագործում |
|---|---|---|---|---|
| Անուղղակի | Գլոբալային | Տարր որոնում | Նվազ (միայն ժամանակ) | Հեշտ կարգավորում բոլոր տարրերի համար |
| Անհատական | Կոնկրետ | Կարգավորված պայմանը | Բարձր (ժամանակ, պայման) | Կատարյալ սպասում կոնկրետ վիճակների համար |
| Նուրբ | Կոնկրետ | Կարգավորված պայմանը | Ամենաբարձր (ժամանակ, պայման, ինտերվալ, անտեսում արտահայտություններ) | Կոմպլեքս սպասման սցենարներ՝ սխալի մշակմամբ |