DEV Community

Rahul Sharma
Rahul Sharma

Posted on

Comprehensive Guide to Waits in Selenium 4

Handling dynamic web elements is one of the key challenges in test automation. Selenium 4 provides three primary types of waits—Implicit Wait, Explicit Wait, and Fluent Wait—to address this challenge. Each has specific use cases and benefits, depending on the scenario.

Let’s delve deeper into each type, their code examples, advantages, disadvantages, best practices, and alternatives.

Types of Waits in Selenium 4

1. Implicit Wait

Implicit Wait sets a default waiting time for the WebDriver to search for an element before throwing a NoSuchElementException. It applies globally to all elements in the test script.

Use Case: Ideal when you want a simple, global wait setting for all elements.

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class ImplicitWaitExample {
    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://example.com");

        // Your test steps here
        driver.quit();
    }
}
Enter fullscreen mode Exit fullscreen mode

2. Explicit Wait

Explicit Wait allows waiting for a specific condition to occur before proceeding further. It is tailored to dynamic elements or actions, offering more precision than Implicit Wait.

Use Case: Useful when you need to wait for specific conditions, such as an element becoming visible, clickable, or enabled.

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;

public class ExplicitWaitExample {
    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();
        driver.get("https://example.com");

        WebDriverWait wait = new WebDriverWait(driver, 20);
        WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("exampleId")));

        // Perform actions on the element
        element.click();

        driver.quit();
    }
}

Enter fullscreen mode Exit fullscreen mode

3. Fluent Wait

Fluent Wait provides greater control over waiting behavior. It allows you to define:

  • Maximum wait time.
  • Polling frequency.
  • Exceptions to ignore during the wait.

Use Case: Best for scenarios where conditions need to be checked repeatedly at regular intervals, and exceptions like NoSuchElementException must be handled.

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.FluentWait;
import java.time.Duration;
import java.util.NoSuchElementException;

public class FluentWaitExample {
    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();
        driver.get("https://example.com");

        FluentWait<WebDriver> wait = new FluentWait<>(driver)
                .withTimeout(Duration.ofSeconds(30))
                .pollingEvery(Duration.ofSeconds(5))
                .ignoring(NoSuchElementException.class);

        WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("exampleId")));

        // Perform actions on the element
        element.click();

        driver.quit();
    }
}

Enter fullscreen mode Exit fullscreen mode

Comparison Table

Comparison

Advantages and Disadvantages

Implicit Wait

Advantages:

  • Easy to implement and maintain for simple scripts.
  • Applies globally, reducing the need for repeated wait statements.

Disadvantages:

  • Limited flexibility, as it waits for the same duration across all elements.
  • Can cause issues when combined with Explicit or Fluent Wait, leading to unpredictable behavior.

Explicit Wait

Advantages:

  • Allows precise control over waiting for specific conditions.
  • Can target elements that take longer to load, avoiding unnecessary global waits.

Disadvantages:

  • Slightly more verbose than Implicit Wait.
  • Requires familiarity with ExpectedConditions.

Fluent Wait

Advantages:

  • Highly customizable with polling intervals and exception handling.
  • Suitable for handling conditions with irregular or unpredictable timing.

Disadvantages:

  • Complex implementation compared to Implicit and Explicit Waits.
  • Frequent polling can slightly impact test performance.

Best Practices

Avoid Mixing Waits:
Mixing implicit and explicit waits can lead to unpredictable wait times. It's advisable to stick with one type of wait strategy in a single test script.

Use Explicit Waits When Necessary:
For dynamic elements that may load at different times, prefer explicit waits as they provide better control and reliability.

Limit Implicit Wait Duration:
Set a reasonable duration for implicit waits to avoid unnecessarily long test execution times.


Understanding the strengths and limitations of each wait type allows Selenium users to create efficient and reliable test scripts. Combine these waits with best practices and explore alternatives for handling even the most dynamic applications.

Mastering waits in Selenium helps build reliable test scripts. Take your testing further with actionable insights and efficient reporting using TestReport.io.

Top comments (0)