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.
-
Unbeabsichtigte Wartezeit (Implicit Wait): Legt die maximale Zeit fest, die Selenium versuchen wird, ein Element auf der Seite zu finden, bevor eine
NoSuchElementExceptionausgelö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() -
Explizite Wartezeit (Explicit Wait): Legt die maximale Zeit fest, um eine bestimmte Bedingung zu erfüllen, bevor eine
TimeoutExceptionausgelöst wird. Sie gilt für ein bestimmtes Element oder eine Bedingung. Für die Verwendung ist die KlasseWebDriverWaitund 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() -
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 |