ImplicitWait
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
FluentWait
- creates a method that polls for a successful findElement() response every 5s - for 30s
- wait.until(loop until no exception/false returned){
- create an 'on-the-fly' method
- create a FluentWait wait & set its properties
- try findElement(By) while response is NoSuchElementFound or null
- once true, return WebElement
- create an 'on-the-fly' method
requires import:
com.google.common.base.Function;
not
java.util.function.Function;
public WebElement fluentlyWait(String type, String locator) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
el = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return getWebElement(type, locator);
}
});
return el;
}
Source:
Well, there are two types of wait: explicit and implicit wait. The idea of explicit wait is
WebDriverWait.until(condition-that-finds-the-element);
The concept of implicit wait is
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
You can get difference in details here.
In such situations I'd prefer using explicit wait (fluentWait
in particular):
public WebElement fluentWait(final By locator) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
});
return foo;
};
fluentWait
function returns your found web element. From the documentation on fluentWait
: An implementation of the Wait interface that may have its timeout and polling interval configured on the fly. Each FluentWait instance defines the maximum amount of time to wait for a condition, as well as the frequency with which to check the condition. Furthermore, the user may configure the wait to ignore specific types of exceptions whilst waiting, such as NoSuchElementExceptions when searching for an element on the page. Details you can get here
Usage of fluentWait
in your case be the following:
WebElement textbox = fluentWait(By.id("textbox"));
- Log in to post comments