Tuesday, April 1, 2025

 

❇️ Types of Waits in Selenium WebDriver

Selenium waits to manage script execution and sync issues between the browser and the application.

1. Implicit Wait
Definition:
Implicit wait tells the WebDriver to wait for a specified amount of time before throwing a `NoSuchElementException` if an element is not found.

Syntax:
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));

Use Case:
- Use when you want to set a global wait time for all elements.
- Suitable for static or predictable delays in loading elements.

2. Explicit Wait
Definition:
Explicit wait allows you to wait for a specific condition or element to become available within a defined time.

Syntax:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("example")));

Use Case:
- Use when waiting for specific conditions such as element visibility, clickability, or presence.
- Ideal for handling dynamic content and AJAX elements.

3. Fluent Wait
Definition:
Fluent wait is similar to explicit wait but allows for polling frequency and ignoring specific exceptions.

Syntax:

Wait<WebDriver> fluentWait = new FluentWait<>(driver)
.withTimeout(Duration.ofSeconds(30))
.pollingEvery(Duration.ofSeconds(2))
.ignoring(NoSuchElementException.class);

WebElement element = fluentWait.until(ExpectedConditions.presenceOfElementLocated(By.id("example")));

Use Case:
- Use when elements take varying amounts of time to appear.
- Effective for applications with unpredictable load times.

4. Thread.sleep() (Static Wait)
Definition:
A static wait pauses the execution of the script for a specified time.

Syntax:
Thread.sleep(5000); // Time in milliseconds

Use Case:
- Use for debugging or temporary fixes when other waits don't work.
- Avoid using in production as it can lead to inefficient scripts.

5. WebDriverWait with Custom Conditions
Definition:
A customizable wait condition defined using a lambda or custom logic.

Syntax:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15));
Boolean isTitleCorrect = wait.until(driver -> driver.getTitle().equals("Expected Title"));

Use Case:
- Use for advanced synchronization requirements when predefined `ExpectedConditions` are insufficient.

Best Practices:
1. Prefer explicit wait for better control over element-specific waits.
2. Avoid excessive use of `Thread.sleep()`; replace it with dynamic waits.
3. Combine implicit wait and explicit wait cautiously as it can cause unpredictable behavior.
4. Use fluent wait for handling polling in complex applications.



0 comments:

Post a Comment

Blog Archive

Translate

Popular Posts

Total Pageviews

Blog Archive