FluentWait und WebDriverWait sind beide die Implementierungen der Wait-Schnittstelle.
Das Ziel Fluent WebDriver Explicit Wait und WebDriver Explicit Wait zu verwenden ist mehr oder weniger gleich. In einigen Fällen kann FluentWait jedoch flexibler sein. Da beide Klassen die Implementierungen derselben Wait-Schnittstelle sind, haben beide mehr oder weniger dieselbe Funktion, mit Ausnahme von . FluentWait verfügt über eine Funktion, um ein Prädikat oder eine Funktion als Argument bis zur Methode zu akzeptieren. Auf der anderen Seite, WebDriverWait akzeptiert nur Funktion als ExpectedCondition in bis Methode, die Sie beschränkt nur eine boolesche Rückgabe verwenden.Wenn Sie Predicate in FluentWait verwenden, ermöglicht es Ihnen, jedes Objekt von bis Methode zurückgeben.
Schauen Sie sich hier sorgfältig: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/FluentWait.html#until-com.google.common.base.Predicate-
Beispiele: A FluentWait mit Funktion als Argument, bis mit String Rückkehr:
public void exampleOfFluentWait() {
WebElement foo = driver.findElement(By.id("foo"));
new FluentWait<WebElement>(foo)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(2, TimeUnit.SECONDS)
.until(new Function<WebElement, String>() {
@Override
public String apply(WebElement element) {
return element.getText();
}
});
}
The Same FluentWait Funktion mit Booleschen Rückkehr als Argument in bis Methode.
public void exampleOfFluentWait() {
WebElement foo = driver.findElement(By.id("foo"));
new FluentWait<WebElement>(foo)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(2, TimeUnit.SECONDS)
.until(new Function<WebElement, Boolean>() {
@Override
public Boolean apply(WebElement element) {
return element.getText().contains("foo");
}
});
}
Noch ein FluentWait mit Prädikat.
public void exampleOfFluentWithPredicate() {
WebElement foo = driver.findElement(By.id("foo"));
new FluentWait<WebElement>(foo)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(100, TimeUnit.MILLISECONDS)
.until(new Predicate<WebElement>() {
@Override
public boolean apply(WebElement element) {
return element.getText().endsWith("04");
}
});
}
Beispiel WebDriverWait:
public void exampleOfWebDriverWait() {
WebElement foo = driver.findElement(By.id("foo"));
new WebDriverWait(driver, 10)
.pollingEvery(2, TimeUnit.SECONDS)
.withTimeout(10, TimeUnit.SECONDS)
.until(ExpectedConditions.visibilityOf(foo));
}
Sie können die Abfrageintervall auch in WebDriverWait verwenden und definieren. –
@DeepakKakkarHave meine Antwort geändert. –