Khi các bạn implement automation sẽ có nhiều trường hợp các bạn thấy rằng thao tác của selenium là quá nhanh và và khi trang web đang loading mà các bạn đã cho click một element nào đó. Thì trong trường hợp các bạn nên dùng “wait”, cụ thể sẽ là: implicit wait, explicit wait và fluent wait

Các trường hợp nên dùng wait

Với sự phát triển đến từ công nghệ Web Application, các trang web đã dần trở thành Single-page Application và ít khi cần đến phải reload page. Nên việc sử dụng những method wait page load đã trở nên không sử dụng được.

Do đó, Selenium đã phát triển các Selenium wait bao gồm: Implicit wait, Explicit wait và Fluent wait để cho chúng ta có thể wait hoặc kéo dài thời gian timeout của việc find element ra.

Implicit wait

Trình bày một cách đơn giản, Implicit wait chính là đang cài đặt cho selenium “wait” một khoảng thời gian nhất định trước khi Selenium báo lỗi “No Such Element Exception” (thường được set cho findElement).

Implicit wait syntax:

WebDrivers.manage().timeouts().implicitlyWait(0,TimeUnit.SECONDS);

implicitlyWait method được dùng với 2 parameters:

  • Thời gian với giá trị là integer
  • Đơn vị thời gian, bao gồm: SECONDS, MINUTES, MILISECOND, ….

Explicit wait

Explicit wait được dùng để “wait” với một điều kiện nhất định (ExpectedConditions) hoặc là với một khoảng thời gian nhất định. Explicit wait sử dụng WebDriverWait để wait cho đến khi các điều kiện được đáp ứng.

Explicit wait syntax:

WebDriverWait wait = new WebDriverWait(driver, 20);

wait.until(ExpectedConditions.visibilityOfElement(elemnent);

WebDriverWait bao gồm 2 parameters:

  • 1 là WebDriver mà ta đang khởi tạo và sử dụng
  • 2 là timeout in seconds được sử dụng trong WebDriverWait

Sau khi đã khởi tạo WebDriverWait (tạm đặt tên biến là wait), chúng ta có thể sử dụng syntax là wait.until và bên trong đó chính là những điều kiện để chúng ta wait những trường hợp đặc thù.

Các ExpectedConditions bao gồm:

  1. titleIs
  2. titleContains
  3. urlToBe
  4. urlCOntains
  5. urlMatches
  6. presenceOfElementLocated
  7. visibilityOfElementLocated
  8. invisibilityOfElementLocated