Chờ thông thạo là một thời gian chờ động khiến người lái xe tạm dừng đối với một điều kiện được kiểm tra ở tần suất trước khi đưa ra một ngoại lệ. Phần tử được tìm kiếm trong DOM không phải liên tục mà ở một khoảng thời gian đều đặn.
Ví dụ:nếu thời gian chờ là 5 giây, FluentWait sẽ giám sát DOM theo các khoảng thời gian đều đặn (được xác định bằng cách thăm dò trong thời gian). Trong FluentWait, cần phải xây dựng các phương pháp chờ tùy chỉnh dựa trên điều kiện.
Cú pháp -
Wait<WebDriver> w = new FluentWait< WebDriver >(driver) .withTimeout (10, SECONDS) .pollingEvery (2, SECONDS) .ignoring (NoSuchElementException.class)
Ví dụ
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.FluentWait;
public class Fluentwt {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
String url = "https://www.tutorialspoint.com/index.htm";
driver.get(url);
//implicit wait with time in seconds applied to each elements
driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);
//Clicking on Coding Ground link
driver.findElement(By.xpath("//span[text()=’Coding Ground’]")).click();
// fluent wait declaration
Wait<WebDriver> w = new FluentWait<WebDriver>(driver).withTimeout
(Duration.ofSeconds(30))
.pollingEvery(Duration.ofSeconds(3)).ignoring(
NoSuchElementException.class);
WebElement fl = w.until(new Function<WebDriver, WebElement>() {
// customized condition for fluent wait
public WebElement apply(WebDriver driver) {
if (driver.findElement(By.xpath("[//img[@title=’Whiteboard’"))
.isDisplayed()) {
return true;
}else {
return null;
}
}
});
driver.quit();
}
}