Khám phá nền tảng Automation Testing với Selenium WebDriver: từ khái niệm, cách định vị WebElement, sử dụng XPath, thao tác với bảng (Table), iFrame, đến xử lý Alert.
1. Selenium WebDriver
Selenium WebDriver là một API mã nguồn mở giúp tự động hóa kiểm thử ứng dụng web. Nó cho phép tương tác trực tiếp với trình duyệt giống như người dùng thật.
Đặc điểm nổi bật:
- Hỗ trợ đa trình duyệt: Chrome, Firefox, Safari, Edge.
- Cho phép kiểm thử trên nhiều trình duyệt (cross-browser testing).
- Tích hợp được với framework như TestNG, JUnit, Cucumber.
Xem thêm: https://www.guru99.com/introduction-webdriver-comparison-selenium-rc.html
2. Web Element
Các phần tử giao diện trên web như textbox, button, checkbox, dropdown, radio button… được gọi là WebElement. Các phần tử này có thể được xác định bằng các thuộc tính như id, classname, name hoặc XPath.
Cách định vị phần tử (Locator)
Selenium cung cấp nhiều cách định vị phần tử:
| Loại locator | Mô tả | Ví dụ |
| ID | Định vị theo ID | driver.findElement(By.id(“username”)) |
| Name | Định vị theo name | driver.findElement(By.name(“email”)) |
| ClassName | Định vị theo class | driver.findElement(By.className(“btn-login”)) |
| XPath | Định vị bằng XPath | driver.findElement(By.xpath(“//input[@type=’text’]”)) |
| CSS Selector | Định vị nhanh, phổ biến | driver.findElement(By.cssSelector(“.btn-primary”)) |
| LinkText | Định vị theo văn bản link | driver.findElement(By.linkText(“Forgot Password”)) |
Xem thêm: https://www.guru99.com/locators-in-sehtmllenium.
3. XPath
XPath là ngôn ngữ truy vấn dùng để xác định vị trí phần tử trong cây DOM HTML.
Khi các thuộc tính ID, name không ổn định, XPath là công cụ linh hoạt để xác định phần tử chính xác.
Cú pháp:driver.findElement(By.xpath("//tag[@attribute='value']"));
Các loại XPath:
- Xpath tuyệt đối (Absolute Xpath): Bắt đầu bằng node gốc hoặc dấu gạch chéo đơn “/”, cho phép xác định một đường dẫn tuyệt đối đến đối tượng UI.
- Ví dụ:
/html/body/div[2]/div[1]/div/h4[1]/b
- Ví dụ:
- Xpath tương đối (Relative Xpath): Bắt đầu bằng 2 dấu gạch chéo “//”, tìm phần tử bất kỳ đâu trong tài liệu.
- Ví dụ:
//div//input
- Ví dụ:
- Xpath hỗn hợp (Mixture Xpath): Kết hợp giữa tuyệt đối và tương đối
- Ví dụ:
html//table/tbody/tr/th
- Ví dụ:
XPath động (Dynamic XPath)
Khi giá trị phần tử thay đổi theo runtime, có thể dùng biểu thức XPath để xử lý:
| Hàm | Mô Tả | Cú pháp |
| contains() | Tìm phần tử có thuộc tính hoặc nội dung chứa một phần giá trị | //tag[contains(@attribute, ‘partial_value’)] |
| starts-with() | Tìm phần tử bắt đầu bằng một chuỗ cụ thể | //tag[starts-with(@attribute, ‘start’)] |
| text() | Tìm phần tử theo nội dung văn bản chính xác | //tagname[text()=’ExactText’] |
| or | Chỉ cần một trong hai điều kiện đúng | //tag[@attr1=’value1′ or @attr2=’value2′] |
| and | Cả hai điều kiện đúng | //tag[@attr1=’value1′ and @attr2=’value2′] |
Xem thêm: https://www.guru99.com/xpath-selenium.html
4. Web Table
Web Table là một WebElement dùng để hiển thị dữ liệu dạng bảng (HTML <table>). Có thể là:
- Bảng tĩnh: nội dung cố định.
- Bảng động: dữ liệu thay đổi theo thời gian (vd: danh sách user).
Truy xuất phần tử trong bảng:
Bước 1: Xác định phần tử cha là <table> Bắt đầu XPath với //table
Bước 2: Thêm phần tử con
Ví dụ: //table/tbody
Bước 3: Sử dụng chỉ số (predicate) để chọn dòng cụ thể
Ví dụ: //table/tbody/tr[2] –> chọn dòng thứ 2
Bước 4: Truy cập ô cụ thể bằng cách thêm
Ví dụ: //table/tbody/tr[2]/td[2] –> chọn ô thứ 2 của dòng thứ 2
Trường hợp bảng lồng bảng: Áp dụng tương tự như trên, cần viết XPath chính xác theo thứ tự cha – con
Xem thêm WebTable: https://www.guru99.com/selenium-webtable.html
Xử lý table dynamic: https://www.guru99.com/handling-dynamic-selenium-webdriver.html
5. iFrame
iFrame (Inline Frame) là một trang HTML được nhúng bên trong một trang web khác. Selenium phải chuyển “vào đúng frame” để thao tác được phần tử bên trong
Cách chuyển vào iFrame
| Cách | Ví dụ |
| Theo chỉ số (index) | driver.switchTo().frame(0); |
| Theo tên hoặc ID | driver.switchTo().frame("iframe1"); |
| Theo WebElement | WebElement frame = driver.findElement(By.tagName("iframe"));driver.switchTo().frame(frame); |
Thoát khỏi iFrame:driver.switchTo().parentFrame(); // Quay về frame cha
driver.switchTo().defaultContent(); // Quay về trang chính (root frame)
Khi có nhiều iFrame không có ID/Name:
- Duyệt qua từng iframe bằng chỉ số.
- Mỗi lần chuyển vào iframe → kiểm tra phần tử mong muốn có tồn tại không.
- Nếu có → tiếp tục thao tác trong iframe đó.
List frames = driver.findElements(By.tagName("iframe"));
for (int i = 0; i < frames.size(); i++) {
driver.switchTo().frame(i);
// kiểm tra phần tử mong muốn
}
Xem thêm: https://www.guru99.com/handling-iframes-selenium.html
6. Alert
Alert là hộp thoại JavaScript bật lên để thông báo hoặc yêu cầu xác nhận.
Selenium cung cấp lớp Alert để xử lý 3 loại alert:
| Loại | Mô tả | Phương thức |
| Simple Alert | Thông báo đơn giản | driver.switchTo().alert().accept(); |
| Confirmation Alert | Có Ok/Cancel | alert.dismiss(); hoặc alert.accept(); |
| Prompt Alert | Yêu cầu nhập dữ liệu | alert.sendKeys("text"); alert.accept(); |
Ví dụAlert alert = driver.switchTo().alert();
System.out.println(alert.getText());
alert.accept();
📌 Lưu ý: Selenium chỉ xử lý alert thật (JS), không thao tác được “fake popup” là phần tử HTML – khi đó cần dùng WebElement locator.
Xem thêm: https://www.guru99.com/alert-popup-handling-selenium.html
Cảm ơn mọi người đã đọc bài viết của em ạ 🫶 !
Selenium – Action API – Keyboard: https://ant.ncc.plus/selenium-action-api-keyboard/
