Sobes.tech
Middle

Rääkige Seleniumis mitmest ootusetüübist.

sobes.tech AI

Vastus AI-lt

Selenium Webdriver kasutab erinevaid ootusetappe, et sünkroniseerida skripti tegevusi ja veebilehe laadimist:

  1. Kaudne ooteaeg (Implicit Wait): Määrab maksimaalse aja, mille jooksul Selenium püüab leida elementi lehel, enne kui viskab välja NoSuchElementException. See kehtib kõigile elementide otsinguoperatsioonidele pärast selle seadistamist.

    from selenium import webdriver
    
    # Draiveri objekti loomine
    driver = webdriver.Chrome()
    
    # Kaudse ooteaja seadistamine (10 sekundit)
    driver.implicitly_wait(10)
    
    # Järgmised elementide otsinguoperatsioonid kasutavad seda ootamist
    # driver.get("http://example.com")
    # element = driver.find_element_by_id("some_id")
    
    # Draiveri sulgemine
    # driver.quit()
    
  2. Selge ooteaeg (Explicit Wait): Määrab maksimaalse aja, mille jooksul peab teatud tingimus täidetud olema, enne kui viskab välja TimeoutException. See kehtib konkreetse elemendi või tingimuse kohta. Selleks kasutatakse WebDriverWait klassi ja ühte eelnevalt määratletud või kohandatud "ootustingimust" (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
    
    # Draiveri objekti loomine (siin ei ole vaja üldist ootamist, 
    # kui kasutatakse konkreetsete elementide jaoks selget ootamist)
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Selge ootamise seadistamine (10 sekundit) elemendi olemasolu kontrollimiseks
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "some_id"))
        )
        # Järgmised toimingud elemendiga
        # element.click()
    except:
        # Erandite töötlemine, kui element ei leidu 10 sekundiga
        print("Elementi ei leitud 10 sekundiga")
    
    # Selge ootamise seadistamine (15 sekundit) klikkimise võimaluse kontrollimiseks
    try:
        clickable_element = WebDriverWait(driver, 15).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']"))
        )
        # clickable_element.click()
    except:
        print("Element ei saanud klikkitavaks 15 sekundiga")
    
    # Draiveri sulgemine
    # driver.quit()
    
  3. Paindlik ooteaeg (Fluent Wait): Sarnaselt selgele ootamisele, võimaldab määrata maksimaalse ootamise aja ja tingimuse. Lisaks saab määrata kontrolli intervalli (polling interval) ja loendi eranditest, mida ootamise ajal ignoreerida.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import FluentWait
    from selenium.common.exceptions import NoSuchElementException
    
    # Draiveri objekti loomine
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Paindliku ootamise seadistamine
    wait = FluentWait(driver, timeout=30, poll_frequency=5,
                      ignored_exceptions=[NoSuchElementException])
    
    try:
        element = wait.until(lambda driver: driver.find_element(By.ID, "some_id"))
        # Järgmised toimingud elemendiga
        # element.click()
    except:
        print("Paindliku ootamise abil elementi ei leitud")
    
    # Draiveri sulgemine
    # driver.quit()
    

Võrdlus:

Ootamise tüüp Rakendus Tingimus Paindlikkus Kasutus
Nõrk Globaalne Elementide otsing Madal (ainult aeg) Lihtne seadistada kõigile elementidele
Selge Konkreetne Määratletud tingimus Kõrge (aeg, tingimus) Konkreetsete elementide olekute ootamine
Paindlik Konkreetne Määratletud tingimus Kõrgeim (aeg, tingimus, intervall, erandite ignoreerimine) Keerukad ootese scenarid koos vigade käsitlemisega