• Selenium Video Tutorials

Selenium WebDriver - Wait Support



Selenium Webdriver can be used with various waits like the explicit, implicit, and fluent waits to achieve synchronization and provide Wait support. The waits are mainly applied in the tests to deal with situation when a web element is unavailable at the time, the Selenium test expects it to be available on the page or in the Dom.

Often there lies some lag time before the whole page loads, and web elements are completely available on the web page. The waits available in Selenium Webdriver help to hold back the test execution till an element appears/disappears on a web page in its correct state.

Basic Waits Available in Selenium Webdriver

There are multiple waits available in Selenium Webdriver. They are listed below −

Implicit Wait

It is the default wait available in Selenium. It is a kind of global wait applicable to the whole driver session. The default wait time is 0, meaning if an element is not found, an error will be thrown straight away.

Explicit Wait

It is similar to loops added to code that poll the web page for a particular scenario to become true prior exiting the loop and moving to the next line of code.

Fluent Wait

This is the maximum time the driver waits for a specific condition for an element to be true. It also determines the interval at which the driver will verify(polling interval) prior to locating an element or throwing an exception. The fluent wait is a customized explicit wait which gives the option to handle specific exceptions automatically along with customized messages when an exception occurs. The FluentWait class is used to add fluent waits to tests.

Syntax

Wait wt = new FluentWait(driver)
   .withTimeout(20, TimeUnit.SECONDS)
   .pollingEvery(5, TimeUnit.SECONDS)
   .ignoring(ElementNotInteractableException.class);
   
wt.until(ExpectedConditions.titleIs("Tutorialspoint"));   

In the above example, timeout and polling interval are specified meaning that the driver would wait for 20 seconds and perform a polling in an interval of 5 seconds within the timeout time for the Tutorialspoint browser title condition to be met. If the condition is not satisfied, within that time frame, an exception will be thrown, else the next step will be executed.

Example 1 - Explicit Wait

Let us take an example of the below image, where we would first click on the Click Me button.

Selenium Wait Support 1

After clicking on the Click Me, we would use explicit wait and wait for the presence of the text You have done a dynamic click to be available on a web page.

Selenium Wait Support 2

Code Implementation

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
import java.util.concurrent.TimeUnit;

public class ExplicitsWait {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/buttons.php");

      // identify button then click on it
      WebElement l = driver.findElement(By.xpath("/html/body/main/div/div/div[2]/button[1]"));
      l.click();

      // Identify text
      WebElement e = driver.findElement(By.xpath("//*[@id='welcomeDiv']"));

      // explicit wait to expected condition for presence of a text
      WebDriverWait wt = new WebDriverWait(driver, Duration.ofSeconds(2));
      wt.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='welcomeDiv']")));
      
      // get text
      System.out.println("Get text after clicking: " + e.getText());

      // Quitting browser
      driver.quit();
   }
}

Output

Get text after clicking: You have done a dynamic click

Process finished with exit code 0

In the above example, the text obtained after clicking on the Click Me button was You have done a dynamic click.

Example 2 - Fluent Wait

Let us take another example of the below page where we would first click the Color Change button.

Selenium Wait Support 3

After clicking on the Color Change, we would use fluent wait and wait for the presence of the button Visible After 5 Seconds to be available on a web page.

Selenium Wait Support 4

Code Implementation

package org.example;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.FluentWait;
import org.openqa.selenium.support.ui.Wait;
import java.time.Duration;

public class Fluentwts {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // launching a browser and open a URL
      driver.get("https://www.tutorialspoint.com/selenium/practice/dynamic-prop.php");

      // identify button then click
      WebElement l = driver.findElement(By.xpath("//*[@id='colorChange']"));
      l.click();

      // fluent wait of 6 secs till other button appears
      Wait<WebDriver> w = new FluentWait<WebDriver>(driver)
         .withTimeout(Duration.ofSeconds(20))
         .pollingEvery(Duration.ofSeconds(6))
         .ignoring(NoSuchElementException.class);

      WebElement m = w.until(ExpectedConditions.visibilityOfElementLocated
         (By.xpath("//*[@id='visibleAfter']")));

      // checking button presence
      System.out.println("Button appeared: " + m.isDisplayed());

      // Quitting browser
      driver.quit();
   }
}

Output

Button appeared: true

Process finished with exit code 0

In the above example, we observed that the button Visible After 5 Seconds obtained after clicking on the button Color Change.

Conclusion

This concludes our comprehensive take on the tutorial on Selenium Webdriver Wait Support. We’ve started with describing Basic Waits Available in Selenium Webdriver, and examples to illustrate explicit, and fluent waits in Selenium Webdriver. This equips you with in-depth knowledge of the Selenium Webdriver Wait Support. It is wise to keep practicing what you’ve learned and exploring others relevant to Selenium to deepen your understanding and expand your horizons.

Advertisements