FluentWaitとWebDriverWaitは両方ともWaitインターフェイスの実装です。
Fluent WebDriver Explicit WaitとWebDriver Explicit Waitを使用する目標は、ほぼ同じです。しかし、FluentWaitは柔軟性があります。どちらのクラスも同じWaitインターフェースの実装であるため、どちらも同じ機能を持っています。FluentWaitには、メソッドまで述部または関数を引数として受け入れる機能があります。一方、WebDriverWaitは、メソッドまではExpectedConditionの関数のみを受け入れます。これはブール値の戻り値のみを使用するように制限します.FredentWaitでPredicateを使用すると、Objectからuntilメソッドを返すことができます。ここで慎重に
ルック:
例:文字列のリターンとまでで引数として A FluentWait持つ機能:
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();
}
});
}
までで引数としてブールリターンで機能を有する同一FluentWait方法。
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");
}
});
}
さらに1つのFluentWait with Predicate。 WebDriverWaitの
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");
}
});
}
例:
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));
}
また、WebDriverWaitでポーリング時間を使用および定義することもできます。 –
@DeepakKakkarHaveが私の答えを変えました。 –