Exemples d'attente implicites, explicites et fluides de WebDriver

Quelle est la différence entre une attente implicite, une attente explicite et une attente fluide dans WebDriver? Plus précisément, quelle est la relation entre WebDriverWait et FluentWait?

Voici des exemples d'utilisation de chaque méthode d'attente dans WebDriver avec Java.



Attente implicite

Un attente implicite consiste à indiquer à WebDriver d'interroger le DOM pendant un certain temps lorsqu'il tente de trouver un ou plusieurs éléments s'ils ne sont pas immédiatement disponibles. Le paramètre par défaut est 0. Une fois défini, l'attente implicite est définie pour la durée de vie de l'instance d'objet WebDriver.


Exemple d'utilisation de l'attente implicite

WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get('http://somedomain/slow_loading_url'); WebElement dynamicElement = driver.findElement(By.id('dynamicElement'));

Quand devrions-nous utiliser des attentes implicites?


Normalement, il n'est pas recommandé d'utiliser des attentes implicites, lorsque nous pouvons utiliser des attentes explicites ou des attentes fluides.



Attente explicite

Un attente explicite est un code que vous définissez pour attendre qu'une certaine condition se produise avant de continuer dans le code. WebDriverWait appelle par défaut la condition ExpectedCondition toutes les 500 millisecondes jusqu'à ce qu'elle soit renvoyée avec succès.

Exemple d'utilisation de l'attente explicite

WebDriver driver = new FirefoxDriver(); driver.get('http://somedomain/someurl'); WebElement dynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id('dynamicElement')));

Quand devrions-nous utiliser des attentes explicites?


Nous utiliserions normalement une attente explicite si un élément prend du temps à se charger. Nous avons également utilisé l'attente explicite pour vérifier la propriété CSS d'un élément (présence, cliquabilité, etc.) qui peut changer dans les applications Ajax.



Attente fluide

Lors de l'utilisation de l'instance FluentWait, nous pouvons spécifier:

  • La fréquence à laquelle FluentWait doit vérifier les conditions définies.
  • Ignorez les types spécifiques d'exception en attente tels que NoSuchElementExceptions lors de la recherche d'un élément sur la page.
  • La durée maximale d'attente pour une condition

Exemple d'utilisation de FluentWait

// Waiting 30 seconds for an element to be present on the page, checking // for its presence once every 5 seconds. Wait wait = new FluentWait(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class); WebElement foo = wait.until(new Function() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id('foo')); } });

Quand devrions-nous utiliser FluentWait?


Lorsque vous essayez de tester la présence d'un élément qui peut apparaître toutes les x secondes / minutes.



Différence entre WebDriverWait et FluentWait

WebDriverWait est une sous-classe de FluentWait. Dans FluentWait, vous avez plus d'options à configurer, ainsi que le temps d'attente maximal, comme l'intervalle d'interrogation, les exceptions à ignorer, etc.

Donc, au lieu d'attendre puis d'utiliser findElement:

WebDriverWait wait = new WebDriverWait(driver, 18); wait.until(ExpectedConditions.elementToBeClickable(By.linkText('Account'))); WebElement element = driver.findElement(By.linkText('Account')); element.sendKeys(Keys.CONTROL); element.click();

on peut utiliser:


WebElement element = wait.until(
ExpectedConditions.elementToBeClickable(By.linkText('Account')));

Lectures complémentaires: