ExplicitWait’s newly introduced method ‘Duration.of()’ in Selenium 4
What you will Learn:
Newly introduced Duration.of() method in Explicit Wait (Selenium 4)
Code snippets
Newly introduced Duration.of() method in Explicit Wait (Selenium 4)
We use WebDriverWait to explicitly wait for an element to load on a page.
Before we practically see the enhanced Explicit Wait approach in Selenium 4, let us quickly see the older approach in Selenium 3.
Let us automate a simple use case:
Launch https://www.selenium-tutorial.com/courses
Explicitly wait for the clickable link ‘LIFETIME MEMBERSHIP TO ALL LIVE TRAININGS’ to appear
Grab the text of above link
Click the link
Let us inspect the link ‘LIFETIME MEMBERSHIP TO ALL LIVE TRAININGS’
Below is the code snippet for Selenium 3. Notice that the method is deprecated in selenium 4, but we can still use it. In the old approach, we used to write (driver, <timeInSeconds>)
//Old Approach (Selenium 3)
WebElement elem1 = new WebDriverWait(driver, 10) .until(ExpectedConditions.elementToBeClickable(By.linkText("LIFETIME MEMBERSHIP TO ALL LIVE TRAININGS")));
System.out.println(elem1.getText());
elem1.click();
Below is the complete code with older approach:
Let us run this.
Below is the console log that prints the link’s text
Also notice that selenium clicks the link ‘LIFETIME MEMBERSHIP TO ALL LIVE TRAININGS’
Let us now look at the new approach. In the new approach, notice below that we have Duration.ofSeconds() method:
//New Approach (Selenium 4)
WebElement elem1 = new WebDriverWait(driver, Duration.ofSeconds(10)) .until(ExpectedConditions.elementToBeClickable(By.linkText("LIFETIME MEMBERSHIP TO ALL LIVE TRAININGS")));
System.out.println(elem1.getText());
elem1.click();
There are many other options available, example, ofDays, ofHours, ofNanos etc as can be seen below
So let us comment the old approach
Run the script, we would get the same output as we saw with old approach.
Let us intentionally introduce an error in the linkText so that the test case fails
Save and run the test.
Notice below that Selenium waits for 10 seconds for the desired element to load on webpage. When it does not find the expected element, TimeoutException is thrown
See the console log
Code snippet
package sel4scripts;
import java.time.Duration;
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 io.github.bonigarcia.wdm.WebDriverManager;
public class ExplicitWaitSel4 {
public static void main(String[] args) {
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
driver.get("https://www.selenium-tutorial.com/courses");
/*
//Old Approach (Selenium 3)
WebElement elem1 = new WebDriverWait(driver, 10)
.until(ExpectedConditions.elementToBeClickable(By.linkText("LIFETIME MEMBERSHIP TO ALL LIVE TRAININGS")));
System.out.println(elem1.getText());
elem1.click();
*/
//New Approach (Selenium 4)
WebElement elem1 = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.elementToBeClickable(By.linkText("LIFETIME MEMBERSHIP TO ALL LIVE TRAININGS")));
System.out.println(elem1.getText());
elem1.click();
}
}
Thank you for reading!