Trong quá trình viết Automation test, hẳn là có lúc bạn gặp Alert box/pup-up hiển thị trên màn hình và không cho phép bạn thao tác trên trang web cho đến khi pop-up được đóng lại.
Bài này tôi sẽ giới thiệu với các bạn cách xử lý Alert/pop-up trong Selenium WebDriver. Chúng ta bắt đầu nhé!
Alert/pop-up là gì?
Giới thiệu
Alert/pop-up là một dạng hộp thoại cảnh báo được dùng để cảnh bảo người dùng về một hành động, sự kiện hay trạng thái nào đó của ứng dụng:
Các loại Alert/popup:
- Hộp thoại cảnh báo (Alert message)
- Hộp thoại xác nhận (Confirmation dialog box)
- Hộp thoại nhắc nhở (Prompt dialog box)
Khi hộp thoại xuất hiện, nó buộc người dùng đọc thông báo và sẽ không được thao tác gì trên cửa sổ hiện tại cũng như truy cập vào các thành phần khác của trang cho đến khi hộp thoại được đóng lại.
Note: Các bạn có thể download HTML code của Alert Example tại đây
1. Hộp thoại cảnh báo (Alert message)
- Được viết bằng javaScript, sử dụng phương thức alert()
- Được sử dụng để gửi thông tin tới người dùng
- Hiển thị alert box với nội dung hoặc thông tin hiển thị bên trong hộp thoại và button “OK”
2. Hộp thoại xác nhận (Confirmation dialog box)
- Được viết bằng javaScript, sử dụng phương thức confirm()
- Được sử dụng khi muốn người dùng kiểm tra và xác nhận việc gì đó
- Hiển thị alert box với nội dung hoặc thông tin hiển thị bên trong hộp thoại với button “OK” (Trả về giá trị true) và “Cancel” (trả về giá trị false)
3. Hộp thoại nhắc nhở (Prompt dialog box)
- Được viết bằng javaScript, sử dụng phương thức prompt()
- Được sử dụng khi muốn người dùng nhập thông tin/ dữ liệu
- Khi hộp thoại bật lên, sẽ có textbox cho người dùng nhập thông tin cùng với button “OK” và “Cancel”
Cách handle Alerts/pop-ups trong Selenium WebDriver
Như các bạn thấy là sẽ không thể xác định được webElement của các dialog/alert pop-up trên nên chúng ta không thể xử lý nó như các thành phần web thông thường là xác định được locator và thực hiện action trên nó.
Selenium WebDriver có cung cấp phương thức .switchTo() cho chúng ta chuyển đổi từ cửa sổ chính sang Alert popup để thực thi các thao tác bên trong hộp thoại đó.
Alert alert = driver.switchTo().alert();
Và interface Alert() cung cấp các phương thức sau để xử lý các pop-up này
- accept() – Phương thức này được dùng để thực hiện hành động người dùng click vào button “OK” trên hộp thoại.
- dismiss() – Phương thức này được dùng để thực hiện hành động người dùng click vào button “Cancel” trên hộp thoại.
- getText() – Phương thức này được dùng để thực hiện việc trả về nội dung text trên hộp thoại.
- sendKeys(String keyToSend) – Phương thức này được dùng để thực hiện hành động người dùng nhập nội dung/ thông tin vào textbox trên hộp thoại.
Giờ chúng ta sẽ thực hiện ví dụ sau nhé:
1. Hộp thoại cảnh báo (Alert message)
- Mở trình duyệt Chrome và truy cập vào trang alertExample.html
- Click button “Try with alert box”
- In thông tin trên alert pop-up ra console
- Đóng pop-up
package SeleniumWebDriverTutorial; import io.github.bonigarcia.wdm.WebDriverManager; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class AlertExample { public static void main (String[] args) throws InterruptedException { WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(); driver.manage().window().maximize(); driver.get("D:\\PROJECTS\\alertExample.html"); Thread.sleep(3000); // 1. Alert pop-up driver.findElement(By.name("alert")).click(); Alert alert = driver.switchTo().alert(); System.out.println("Message: "+"\n" + alert.getText()); alert.accept(); } }
2. Hộp thoại xác nhận (Confirmation dialog box)
- Mở trình duyệt Chrome và truy cập vào trang alertExample.html
- Click button “Try with confirm box”
- In thông tin trên alert pop-up ra console
- Xác nhận “Cancel”
//2. Confirmation pop-up driver.findElement(By.name("confirm")).click(); Alert alert = driver.switchTo().alert(); System.out.println("Message: "+"\n" + alert.getText()); alert.dismiss();
3. Hộp thoại nhắc nhở (Prompt dialog box)
- Mở trình duyệt Chrome và truy cập vào trang alertExample.html
- Click button “Try with prompt box”
- Nhập “Devopsify.co” vào textbox
- In thông tin trên alert pop-up ra console
- Xác nhận “OK”
//3. Prompt pop-up driver.findElement(By.name("prompt")).click(); Alert alert = driver.switchTo().alert(); alert.sendKeys("Devopsify.co"); System.out.println("Message: "+"\n" + alert.getText()); alert.accept();