Authentication pop-up là gì?
Authentication pop-up cũng gần giống với Alert pop-up khi trình duyệt được điều hướng đến một trang web cụ thể, nó hiển thị ở phía trên của trình duyệt và yêu cầu nhập tên người dùng và mật khẩu (username/ password). Loại pop-up này có đặc điểm:
- Nó không có web element giống như các Popup khác, để chúng ta có thể bắt locator như Id, class, attribute v.v cho textbox (username/password) và button (Sign in/ Cancel)
- Nhưng nó không giống với các alert pop-up ở điểm là nó không phải là JavaScript popup.
Vì vậy, chúng ta không thể sử dụng alert Interface cũng như phương thức send_keys() để nhập tên người dùng và mật khẩu được. Điều này sẽ không hoạt động với Authentication popup.
Nếu bạn vẫn chưa hình dung thì xem hình dưới dây nhé:
Ví dụ: Truy cập vào trang web http://the-internet.herokuapp.com/basic_auth thì authentication popup sẽ bật lên

Làm cách nào để xử lý authentication popup trong Selenium WebDriver?
Có nhiều cách được dùng để xử lý authentication popup như sau:
Chuyển tên người dùng và mật khẩu lên URL
Cách đơn giản và dễ nhất đó là chuyển tên người dùng (username) và mật khẩu (password) lên URL trong khi bạn mở URL bằng phương thức driver.get() theo cú pháp
driver.get(‘https://username:password@URL')
Ví dụ :
- URL của trang web : http://the-internet.herokuapp.com/basic_auth
- username: admin
- password: admin
Vậy chúng ta sẽ viết như sau:
driver.get(‘http://admin:ad***@th**********.com/basic_auth ')
Code example
public static void main(String args[]) {
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
// driver.get("http://the-internet.herokuapp.com/basic_auth"); //Popup will appear
// Syntax: http://username:password@URL
driver.get("https://admin:ad***@th**********.com/basic_auth");
//validation
String text = driver.findElement(By.cssSelector("p")).getText();
System.out.println(text);
driver.close();
driver.quit();
}
Kết quả:
Sau khi chạy chưởng trình trên, Authentication popup sẽ không còn xuất hiện nữa. Có nghĩa là tiến trình xác nhận thông tin người dùng đã được xử lý.

Cách tiếp cận này có thể không chạy được ở một số trình duyệt, lúc đó ta sẽ dùng AutoIT hay Selenium 4 như bên dưới nhé.
Sử dụng Selenium 4 beta version
Phiên bản mới nhất của Selenium đã giới thiệu class ChromiumDriver, lớp này có hai phương thức là getDevTools() và execCdpCommand() để truy cập DevTools của chrome.
- getDevTools(): Phương thức này trả về đối tượng DevTools mới, cho phép người dùng gửi các lệnh built-in Selenium. Trong các phiên bản trước của Selenium, chúng ta đã sử dụng kỹ thuật đã giới thiệu ở tren là chuyển thông tin đăng nhập trong URL của trang web để xử lý authentication popup trong trang web. Bây giờ trong phiên bản Selenium 4 beta, chúng ta có thể dễ dàng thiết lập xác thực cơ bản bằng cách gửi thêm các HTTP headers.

Cheers!