Sobes.tech
Middle

Erzählen Sie von einigen Arten des Wartens in Selenium.

sobes.tech KI

Antwort von AI

Im Selenium Webdriver werden verschiedene Arten von Wartezeiten verwendet, um die Aktionen des Skripts mit dem Laden der Webseite zu synchronisieren.

  1. Unbeabsichtigte Wartezeit (Implicit Wait): Legt die maximale Zeit fest, die Selenium versuchen wird, ein Element auf der Seite zu finden, bevor eine NoSuchElementException ausgelöst wird. Sie gilt global für alle Suchoperationen nach ihrer Einstellung.

    from selenium import webdriver
    
    # Erstellen einer Driver-Instanz
    driver = webdriver.Chrome()
    
    # Festlegen der unbeabsichtigten Wartezeit (10 Sekunden)
    driver.implicitly_wait(10)
    
    # Nachfolgende Suchoperationen verwenden diese Wartezeit
    # driver.get("http://example.com")
    # element = driver.find_element_by_id("some_id")
    
    # Schließen des Drivers
    # driver.quit()
    
  2. Explizite Wartezeit (Explicit Wait): Legt die maximale Zeit fest, um eine bestimmte Bedingung zu erfüllen, bevor eine TimeoutException ausgelöst wird. Sie gilt für ein bestimmtes Element oder eine Bedingung. Für die Verwendung ist die Klasse WebDriverWait und eine der vordefinierten oder anpassbaren "erwarteten Bedingungen" (expected conditions) erforderlich.

    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
    
    # Erstellen einer Driver-Instanz (keine unbeabsichtigte Wartezeit notwendig, 
    # wenn explizit für bestimmte Elemente verwendet)
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Festlegen der expliziten Wartezeit (10 Sekunden) für die Präsenz des Elements
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "some_id"))
        )
        # Weitere Aktionen mit dem Element
        # element.click()
    except:
        # Behandlung der Ausnahme, falls das Element nicht innerhalb von 10 Sekunden gefunden wurde
        print("Element nicht innerhalb von 10 Sekunden gefunden")
    
    # Festlegen der expliziten Wartezeit für die Klickbarkeit des Elements
    try:
        clickable_element = WebDriverWait(driver, 15).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']"))
        )
        # clickable_element.click()
    except:
        print("Element wurde innerhalb von 15 Sekunden nicht klickbar")
    
    # Schließen des Drivers
    # driver.quit()
    
  3. Fluide Wartezeit (Fluent Wait): Ähnlich wie die explizite Wartezeit, erlaubt sie die Festlegung der maximalen Wartezeit und der Bedingung. Zusätzlich kann das Polling-Intervall für die Überprüfung der Bedingung und eine Liste von Ausnahmen, die während des Wartens ignoriert werden sollen, festgelegt werden.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import FluentWait
    from selenium.common.exceptions import NoSuchElementException
    
    # Erstellen einer Driver-Instanz
    driver = webdriver.Chrome()
    
    # driver.get("http://example.com")
    
    # Festlegen der fluide Wartezeit
    wait = FluentWait(driver, timeout=30, poll_frequency=5,
                      ignored_exceptions=[NoSuchElementException])
    
    try:
        element = wait.until(lambda driver: driver.find_element(By.ID, "some_id"))
        # Weitere Aktionen mit dem Element
        # element.click()
    except:
        print("Element wurde mit der fluide Wartezeit nicht gefunden")
    
    # Schließen des Drivers
    # driver.quit()
    

Vergleich:

Art der Wartezeit Anwendung Bedingung Flexibilität Verwendung
Unbeabsichtigt Global Element suchen Niedrig (nur Zeit) Einfache Einstellung für alle Elemente
Explizit Spezifisch Bestimmte Bedingung Hoch (Zeit, Bedingung) Warten auf bestimmte Zustände von Elementen
Flexibel Spezifisch Bestimmte Bedingung Höchste (Zeit, Bedingung, Intervall, ignorierte Ausnahmen) Komplexe Warte-Szenarien mit Fehlerbehandlung