Parla di alcuni tipi di attesa in Selenium.
sobes.tech AI
Risposta dell'AI
In Selenium Webdriver vengono utilizzati diversi tipi di attese per sincronizzare le azioni dello script con il caricamento della pagina web.
-
Attesa implicita (Implicit Wait): Imposta il tempo massimo durante il quale Selenium tenterà di trovare un elemento sulla pagina prima di lanciare un'eccezione
NoSuchElementException. Si applica globalmente a tutte le operazioni di ricerca degli elementi dopo la sua configurazione.from selenium import webdriver # Creare un'istanza del driver driver = webdriver.Chrome() # Impostare l'attesa implicita (10 secondi) driver.implicitly_wait(10) # Le operazioni di ricerca degli elementi successive utilizzeranno questa attesa # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Chiudere il driver # driver.quit() -
Attesa esplicita (Explicit Wait): Definisce il tempo massimo per soddisfare una condizione specifica prima di lanciare un'eccezione
TimeoutException. Si applica a un elemento o condizione specifica. Per usarla, è necessaria la classeWebDriverWaite una delle "condizioni attese" predefinite o personalizzate.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 # Creare un'istanza del driver (non è necessaria attesa implicita qui, # se si usa esplicita per elementi specifici) driver = webdriver.Chrome() # driver.get("http://example.com") # Impostare l'attesa esplicita (10 secondi) per la presenza dell'elemento try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Azioni successive con l'elemento # element.click() except: # Gestire l'eccezione se l'elemento non viene trovato in 10 secondi print("Elemento non trovato in 10 secondi") # Impostare l'attesa esplicita per la cliccabilità dell'elemento try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Elemento non diventato cliccabile in 15 secondi") # Chiudere il driver # driver.quit() -
Attesa fluida (Fluent Wait): Simile all'attesa esplicita, permette di impostare il tempo massimo di attesa e la condizione. Inoltre, permette di specificare l'intervallo di polling per verificare la condizione e una lista di eccezioni da ignorare durante l'attesa.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Creare un'istanza del driver driver = webdriver.Chrome() # driver.get("http://example.com") # Impostare l'attesa fluida wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Azioni successive con l'elemento # element.click() except: print("Elemento non trovato con l'attesa fluida") # Chiudere il driver # driver.quit()
Confronto:
| Tipo di attesa | Applicazione | Condizione | Flessibilità | Utilizzo |
|---|---|---|---|---|
| Implicita | Globale | Ricerca elemento | Bassa (solo tempo) | Configurazione semplice per tutti gli elementi |
| Esplicita | Specifica | Condizione definita | Alta (tempo, condizione) | Attesa di stati specifici degli elementi |
| Fluida | Specifica | Condizione definita | Massima (tempo, condizione, intervallo, eccezioni da ignorare) | Scenari di attesa complessi con gestione degli errori |