Attente implicite et explicite dans Selenium

Attente implicite et explicite dans Selenium
MIN
24 Nov 2023

Table des matières

Pourquoi les attentes sont-elles nécessaires dans Selenium ?

Dans l’automatisation de l’interface utilisateur, les attentes sont nécessaires parce que certains éléments sont chargés de manière asynchrone sur la page, de sorte qu’après le déclenchement d’un événement, la page peut être chargée avec succès, mais certains éléments peuvent encore être déchargés.

Cela provoque une exception « elementNotFound » lors de la recherche d’un élément. Dans ce cas, nous devons utiliser Thread.sleep(), t. j. L’attente statique, qui interrompt l’exécution du test pendant une durée déterminée, puis exécute l’étape suivante.

Puisque Thread.sleep() attendra le temps spécifié, que les éléments soient affichés ou non avant ce délai. Par conséquent, l’utilisation de Thread.sleep() n’est jamais recommandée lors de l’automatisation de l’interface utilisateur.

Pour éviter cela, Selenium propose différents types d’attente, parmi lesquels les attentes implicites et explicites sont les plus couramment utilisées.

Attente implicite

L’attente par défaut est définie pour l’instance WebDriver lorsqu’elle est utilisée et s’applique à tous les éléments web. Avec l’attente implicite, le pilote Web interroge le DOM pour vérifier la disponibilité de l’élément Web et attend la durée maximale spécifiée avant de lever une exception NoSuchElementException.

WebDriver driver = new FirefoxDriver() ;

driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS) ;

Dans l’extrait de code ci-dessus, la valeur 20 spécifiée dans la méthode d’attente implicite est le temps maximum en secondes que le WebDriver attendra avant de lancer une exception NoSuchElementException lors de la recherche d’un WebElement.

Attente explicite

Contrairement à l’attente implicite, l’attente explicite s’applique à chaque élément web. L’attente explicite définit certaines conditions dans lesquelles une instance de WebDriver attend avant de récupérer des éléments Web ou d’effectuer des actions sur ceux-ci. Parmi les conditions les plus courantes spécifiées dans l’attente explicite, citons : elementToBeClickable, presenceOfElementLocated, etc.

WebDriverWait wait = new WebDriverWait(driver, 15) ;

wait.until(ExpectedConditions.presenceOfElementLocated(ElementLocator)) ;

Ici, l’instance WebDriver attendra jusqu’à ce que la condition spécifiée soit remplie, c’est-à-dire j. la présence d’un élément localisé par ElementLocator avec un temps d’attente maximum de 15 secondes, après quoi, si la condition n’est toujours pas remplie, il lève une exception.