Sobes.tech
Middle

Խոսեք Selenium-ում սպասման մի քանի տեսակների մասին։

sobes.tech AI

Պատասխան AI-ից

Սելենում Webdriver-ով օգտագործվում են տարբեր տեսակի սպասումներ՝ սինխրոնիզացիայի համար սցենարի գործողությունների և վեբ էջի բեռնման միջև:

  1. Անուղղակի սպասում (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()
    
  2. Անհատական սպասում (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()
    
  3. Նուրբ սպասում (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()
    

Համեմատություն:

Սպասման տեսակը Օգտագործում Պայման Նուրբություն Օգտագործում
Անուղղակի Գլոբալային Տարր որոնում Նվազ (միայն ժամանակ) Հեշտ կարգավորում բոլոր տարրերի համար
Անհատական Կոնկրետ Կարգավորված պայմանը Բարձր (ժամանակ, պայման) Կատարյալ սպասում կոնկրետ վիճակների համար
Նուրբ Կոնկրետ Կարգավորված պայմանը Ամենաբարձր (ժամանակ, պայման, ինտերվալ, անտեսում արտահայտություններ) Կոմպլեքս սպասման սցենարներ՝ սխալի մշակմամբ