1. Tóm tắt nhanh & phần tử bạn sẽ chọn
Chào bạn mới! Khi mới học automation, bước đầu tiên và quan trọng nhất là dạy công cụ (như Playwright) cách 'tìm' đúng phần tử trên giao diện để thao tác — bước này gọi là chọn locator selector. Chọn sai sẽ khiến test chạy không ổn định: hôm nay chạy được, mai đổi 1 dòng CSS là gãy, dù tính năng thực tế vẫn hoạt động bình thường. Bài này dùng màn hình đăng nhập của app TMĐT ShopEasy làm ví dụ xuyên suốt: bạn sẽ học các loại locator phổ biến (id, class, CSS, XPath, text, role, data-testid), cách chọn loại bền vững nhất, viết locator thật bằng Playwright, và dùng công cụ inspect để tìm phần tử nhanh.
2. Vấn đề: selector giòn khiến test dễ vỡ
Hãy tưởng tượng bạn viết locator cho nút 'Đăng nhập' trên ShopEasy bằng cách mở DevTools, thấy class hiển thị là '.css-a8f3k2', rồi copy nguyên chuỗi đó vào test. Cách này chạy đúng ngay lúc viết, vì tại thời điểm đó class thật sự tồn tại. Vấn đề là nhiều dự án hiện đại dùng công cụ CSS-in-JS hoặc bundler tự sinh tên class ngẫu nhiên mỗi lần build lại — dù bạn không sửa gì về giao diện hay nghiệp vụ.
Kết quả là sau một lần deploy bình thường, class đó đổi thành '.css-x92mtq', và locator cũ không còn tìm thấy phần tử nào nữa. Test báo lỗi đỏ dù tính năng đăng nhập trên thực tế vẫn hoạt động hoàn hảo — đây chính là 'báo động giả' (false alarm), một trong những lý do phổ biến nhất khiến đội ngũ dần mất niềm tin vào bộ test tự động. Bài học cốt lõi: locator giòn không chỉ tốn công sửa, mà còn làm giảm giá trị của cả automation.
3. Locator cơ bản: id, class, CSS selector
id là loại locator cơ bản và thường ổn định nhất trong nhóm locator kiểu cấu trúc, vì theo chuẩn HTML, id phải là DUY NHẤT trên toàn trang — ví dụ '#email-input' trên màn đăng nhập ShopEasy. Nếu đội dev đặt tay và giữ nguyên id này, đây là lựa chọn tốt. class CSS (ví dụ '.btn-primary') cũng dùng được, nhưng kém ổn định hơn vì một class có thể gắn cho nhiều phần tử, và dễ đổi khi đội thiết kế chỉnh style.
CSS selector phức hợp (ví dụ 'div.card > button:nth-child(2)') cho phép tìm phần tử dựa trên cấu trúc lồng nhau, hữu ích khi phần tử không có id/class riêng. Nhưng đây cũng là loại giòn nhất trong nhóm CSS, vì chỉ cần đội FE đổi thứ tự phần tử hay thêm 1 lớp bọc div, toàn bộ đường dẫn CSS có thể sai lệch. Nên xem CSS selector phức hợp là lựa chọn cuối cùng, không phải mặc định.
4. Locator theo text & role (accessibility)
Locator theo text tìm phần tử dựa trên nội dung hiển thị, ví dụ page.getByText('Quên mật khẩu?') trên ShopEasy. Cách này trực quan, dễ đọc, và gần với cách người dùng thật nhìn vào trang. Tuy nhiên, nó có nhược điểm rõ ràng: nếu app hỗ trợ đa ngôn ngữ (vi/en/ja) và bạn chạy test trên bản dịch khác, text sẽ đổi và locator vỡ ngay lập tức.
Locator theo role dựa trên chuẩn accessibility (ARIA) — ví dụ 'button', 'textbox', 'link' — kết hợp với accessible name (tên mà trình đọc màn hình sẽ đọc lên). Cách này vừa bền hơn text thuần (không phụ thuộc CSS/DOM), vừa có lợi ích phụ: buộc bạn phải đảm bảo phần tử có accessibility đúng chuẩn, gián tiếp cải thiện chất lượng UI cho người dùng khuyết tật.
5. data-testid: locator dành riêng cho test
Trong số mọi loại locator, data-testid thường được xem là lựa chọn BỀN NHẤT cho automation, vì nó là thuộc tính HTML tuỳ chỉnh (ví dụ data-testid='btn-login') do chính đội phát triển chủ động thêm vào CHỈ để phục vụ kiểm thử — không liên quan gì tới style hiển thị hay logic nghiệp vụ. Khi đội FE đổi thư viện CSS, đổi cấu trúc DOM, hay thậm chí dịch lại toàn bộ text sang ngôn ngữ khác, data-testid vẫn giữ nguyên nếu không ai chủ đích xoá nó.
💬 Bình luận (0)
Chưa có bình luận nào. Hãy là người đầu tiên!