Locator là "trái tim" của mọi kịch bản Automation Test. Bài viết này cập nhật toàn bộ các chiến lược định vị phần tử trong Selenium 4.x (phiên bản mới nhất 2026), bao gồm cả Relative Locators (định vị tương đối) cực kỳ mạnh mẽ.
Bên cạnh 8 loại locator cơ bản, Selenium 4 đã giới thiệu Relative Locators giúp bạn tìm phần tử dựa trên vị trí của phần tử khác (ở trên, ở dưới, bên trái, bên phải) - cực kỳ hữu ích cho các giao diện phức tạp mà không cần viết XPath dài dòng.
1. 8 Loại Locators Cơ Bản
Đây là những "vũ khí" truyền thống nhưng vẫn hiệu quả nhất:
- id: Ưu tiên số 1 vì tốc độ nhanh nhất và thường là duy nhất.
(
By.id("login-btn")) - name: Thường dùng cho các field trong form. (
By.name("username")) - className: Dùng class CSS. (
By.className("form-control")) - tagName: Tên thẻ HTML (thường dùng để lấy list, ví dụ lấy tất cả thẻ
<a>). - linkText: Tìm thẻ
<a>bằng toàn bộ văn bản hiển thị. - partialLinkText: Tìm thẻ
<a>bằng một phần văn bản (chứa chuỗi con). - cssSelector: Nhanh, cú pháp gọn, hỗ trợ hầu hết các nhu cầu. (Khuyên dùng thay XPath nếu có thể).
- xpath: Mạnh mẽ nhất, định vị được theo text và đi ngược lên cha (ancestor), nhưng tốc độ chậm hơn CSS một chút.
2. Relative Locators (Định vị tương đối) - WebDrive 4+
Nếu bạn gặp một element không có ID/Class rõ ràng, nhưng nó nằm ngay bên phải nút "Submit", hãy dùng Relative Locator!
Cần import static: import static org.openqa.selenium.support.locators.RelativeLocator.with;
// Ví dụ: Tìm password field nằm BÊN DƯỚI username field
By passwordLocator = with(By.tagName("input")).below(By.id("username"));
// Ví dụ: Tìm checkbox nằm BÊN PHẢI label "I agree"
By checkboxLocator = with(By.tagName("input")).toRightOf(By.xpath("//label[text()='I agree']"));
// Kết hợp nhiều điều kiện
driver.findElement(with(By.tagName("button"))
.below(By.id("email"))
.toRightOf(By.id("cancel-btn")));
3. Cách chọn Locator chuẩn "Senior" (2026)
Đừng chọn bừa, hãy tuân thủ thứ tự ưu tiên sau để test case ổn định (stable):
Ưu tiên 1: Các thuộc tính Test ID dành riêng
Yêu cầu Dev thêm các attribute như data-testid, data-cy, id. Đây là cách
bền vững nhất vì chúng không bao giờ thay đổi theo CSS/Style.
// HTML: <button data-testid="submit-order">Buy</button>
driver.findElement(By.cssSelector("[data-testid='submit-order']"));
Ưu tiên 2: CSS Selector (ID > Class > Attribute)
Học kỹ CSS Selector vì nó nhanh hơn XPath trên các trình duyệt hiện đại.
- ID:
#username - Class:
.login-form - Attribute:
input[type='email']
Ưu tiên 3: Text (XPath)
Chỉ dùng khi element không có attribute nào đặc biệt mà chỉ có nội dung text duy nhất.
//xpath: //button[text()='Đăng nhập']
4. Công cụ hỗ trợ tìm Locator (2026)
Bạn không cần phải căng mắt soi HTML nữa, hãy dùng các tool sau:
- SelectorsHub: Plugin trình duyệt tốt nhất hiện nay để gen XPath/CSS chuẩn, hỗ trợ Shadow DOM, iframe.
- Chrome DevTools Recorder: Tích hợp sẵn trong Chrome, cho phép record và export ra code Selenium.
Nắm vững Locator là bạn đã nắm được 50% thành công của Automation Test. Chúc các bạn thực hành tốt!
0 comments:
Post a Comment