Parlez de quelques types d'attente dans Selenium.
sobes.tech IA
Réponse de l'IA
Dans Selenium Webdriver, différentes types d'attentes sont utilisées pour synchroniser les actions du script avec le chargement de la page web.
-
Attente implicite (Implicit Wait) : Définit le temps maximum pendant lequel Selenium tentera de trouver un élément sur la page avant de lancer une exception
NoSuchElementException. Elle s'applique globalement à toutes les opérations de recherche d'éléments après sa configuration.from selenium import webdriver # Création d'une instance du driver driver = webdriver.Chrome() # Définir l'attente implicite (10 secondes) driver.implicitly_wait(10) # Les opérations de recherche d'éléments suivantes utiliseront cette attente # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Fermer le driver # driver.quit() -
Attente explicite (Explicit Wait) : Définit le temps maximum pour remplir une condition spécifique avant de lancer une exception
TimeoutException. Elle s'applique à un élément ou une condition précise. Pour l'utiliser, la classeWebDriverWaitet une des "conditions attendues" prédéfinies ou personnalisées sont nécessaires.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 # Création d'une instance du driver (l'attente implicite n'est pas nécessaire ici, # si une attente explicite est utilisée pour des éléments spécifiques) driver = webdriver.Chrome() # driver.get("http://example.com") # Définir l'attente explicite (10 secondes) pour la présence de l'élément try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Actions ultérieures avec l'élément # element.click() except: # Gérer l'exception si l'élément n'a pas été trouvé en 10 secondes print("Élément non trouvé en 10 secondes") # Définir l'attente explicite pour que l'élément soit cliquable try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("L'élément n'est pas devenu cliquable en 15 secondes") # Fermer le driver # driver.quit() -
Attente fluide (Fluent Wait) : Semblable à l'attente explicite, elle permet de définir le temps d'attente maximal et la condition. Elle permet également de spécifier l'intervalle de sondage (polling interval) pour vérifier la condition et une liste d'exceptions à ignorer pendant l'attente.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Création d'une instance du driver driver = webdriver.Chrome() # driver.get("http://example.com") # Définir l'attente fluide wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Actions ultérieures avec l'élément # element.click() except: print("Élément non trouvé avec l'attente fluide") # Fermer le driver # driver.quit()
Comparaison:
| Type d'attente | Application | Condition | Flexibilité | Utilisation |
|---|---|---|---|---|
| Implicite | Globale | Recherche d'élément | Faible (seulement temps) | Configuration simple pour tous les éléments |
| Explicite | Spécifique | Condition définie | Élevée (temps, condition) | Attente pour des états spécifiques d'éléments |
| Flexible | Spécifique | Condition définie | La plus haute (temps, condition, intervalle, exceptions à ignorer) | Scénarios d'attente complexes avec gestion des erreurs |