Selenium Wait Commands – Implicit, Explicit, Fluent Waits | Selenium WebDriver Tutorial
Selenium Wait commands play an important role while executing Selenium tests. Let’s see different wait commands such as “Implicit“, and “Explicit” wait commands in selenium.
While executing scripts, sometimes we may face an exception “Element Not Visible Exception“. This exception appears when there is a delay in loading time of the elements which we are interacting. To overcome this issue we need to use Wait Commands. Using the Selenium Wait Commands, our script will wait for the elements to load for certain time before continuing with the next step.
Different Types of Selenium Wait Commands are:
Implicit Wait:
The implicit wait tells to the WebDriver to wait for certain amount of time before it throws an exception. Once we set the time, WebDriver will wait for the element based on the time we set before it throws an exception. The default setting is 0 (zero). We need to set some wait time to make WebDriver to wait for the required time.
Note: Implicit Wait is in place for the entire time the browser is open. Time taken to search all the elements are based on the time fixed for the implicit wait.
Syntax:
driver.manage().timeouts().implicitlyWait(TimeOut, TimeUnit.SECONDS);
Implicit Wait time is applied to all the elements in the script.
Implicit wait will accept 2 parameters, the first parameter will accept the time as an integer value and the second parameter will accept the time measurement in terms of SECONDS, MINUTES, MILISECOND, MICROSECONDS, NANOSECONDS, DAYS, HOURS, etc.
Explicit Wait:
Explicit waits are confined to a particular web element. Explicit Wait is code you define to wait for a certain condition to occur before proceeding further in the code.
Explicit wait is of two types:
- WebDriverWait
- FluentWait
WebDriverWait:
WebDriverWait is applied on certain element with defined expected condition and time. This wait is only applied to the specified element. This wait can also throw exception when element is not found.
The following are the Expected Conditions that can be used in Explicit Wait
- alertIsPresent()
- elementSelectionStateToBe()
- elementToBeClickable()
- elementToBeSelected()
- frameToBeAvaliableAndSwitchToIt()
- invisibilityOfTheElementLocated()
- invisibilityOfElementWithText()
- presenceOfAllElementsLocatedBy()
- presenceOfElementLocated()
- textToBePresentInElement()
- textToBePresentInElementLocated()
- textToBePresentInElementValue()
- titleIs()
- titleContains()
- visibilityOf()
- visibilityOfAllElements()
- visibilityOfAllElementsLocatedBy()
- visibilityOfElementLocated()
Syntax:
//WebDriverWait wait = new WebDriverWait(WebDriverRefrence,TimeOut); WebDriverWait wait = new WebDriverWait (driver, 20); wait.until(ExpectedConditions.VisibilityofElementLocated(By.xpath(""//button[@value='Save Changes']"")));
FluentWait:
FluentWait can define the maximum amount of time to wait for a specific condition and frequency with which to check the condition before throwing an “ElementNotVisibleException” exception.
To say in effortless manner, it tries to find the web element repeatedly at regular intervals of time until the timeout or till the object gets found.
We use Fluent Wait commands mainly when we have web elements which sometimes visible in few seconds and some times take more time than usual to visible. Mainly in Ajax applications.
Syntax:
Wait wait = new FluentWait(WebDriver reference) .withTimeout(timeout, SECONDS) .pollingEvery(timeout, SECONDS) .ignoring(Exception.class); WebElement foo=wait.until(new Function<WebDriver, WebElement>() { public WebElement applyy(WebDriver driver) { return driver.findElement(By.id("foo")); } });
Example:
Wait wait = new FluentWait<WebDriver>(driver) .withTimeout(45, TimeUnit.SECONDS) .pollingevery(5, TimeUnit.SECONDS) .ignoring(NoSuchElementException.class);
Fluent Wait uses two parameters – timeout value and polling frequency. In the above syntax we took time out value as 45 seconds and polling frequency as 5 seconds.
The maximum amount of time (45 seconds) to wait for a condition and the frequency (5 seconds) to check the success or failure of a specified condition. If the element is located with in this time frame it will perform the operations else it will throw an “ElementNotVisibleException”
If you are not regular reader of my blog then I highly recommend you to signup for the free email newsletter using the below link.
Subscribe and get a free eBook and regular updates from SoftwareTestingMaterial.com