Hỏi đáp - case study thực tế

[Playwright – Thảo luận] Sử dụng getByRole thay cho getByTestId: Có phải là sự thay thế HOÀN TOÀN không? 🌟

Phong Do Phong Do · 24/03/2025 · 4 phút đọc

damon-gabrielle:
Xin chào 👋, gần đây tôi tham gia một cuộc họp bàn về ưu và nhược điểm của getByRole so với getByTestId 📊. Có một cuộc thảo luận sôi nổi 🔥 về hướng dẫn trong tài liệu locator của Playwright, nơi nói rằng “nên ưu tiên sử dụng role locators” ✨. Điều này khiến một team quyết định chỉ dùng getByRole cho tất cả các tests Playwright trong project mới và cấm hoàn toàn getByTestId 🚫. Ý định là để tập trung vào kiểm tra accessibility – điều mà họ cũng đã có các test riêng biệt 🧪. Tôi muốn nghe thêm ý kiến từ các maintainers về việc này. Thực tế mà nói, liệu getByRole có được xem là có thể thay thế hoàn toàn getByTestId không? 🤔

marshmn:
Ý bạn là getByTestId chứ không phải getById đúng không? 🤨 Tôi không chắc getById có tồn tại đâu. Cá nhân tôi thì dùng getByRole, getByLabel, getByText khoảng 95% thời gian ⏱️, còn getByTestId cho 5% còn lại. Tức là tôi cố tránh dùng getByTestId nếu có thể 🚶‍♂️, nhưng cũng không cấm hoàn toàn khi cảm thấy hợp lý 👍.

dand33:
Đúng vậy ✅, tôi không nghĩ getById tồn tại. Bất kỳ locator nào cũng được, miễn là nó deterministic 🔍. Tôi cho rằng getByRole là tốt nhất vì không chỉ cung cấp locator mà còn ngụ ý một mức độ accessibility 🌐, không giống các locator khác.

damon-gabrielle:
Ồ, xin lỗi vì nhầm lẫn 😅. Ý tôi là getByTestId. Cảm ơn cả hai đã chia sẻ 💬. Tôi muốn hỏi thêm, các bạn có khoảng bao nhiêu bài kiểm tra dùng cách này? Và có áp dụng cho các tests internationalization không? 🌍 Đặc biệt là trường hợp aria label thay đổi hoặc thiếu bản dịch, làm thất bại nhiều bài kiểm tra không nhằm kiểm tra điều đó 🚨. Với vài trăm trường hợp thì việc tìm và sửa lỗi có vẻ ổn 🛠️, nhưng khi dự án lớn hơn, tôi nghĩ nên tách riêng kiểm tra accessibility thành một suite riêng để đánh giá rủi ro nhanh hơn ⚡.

marshmn:
Tôi có vài trăm bài kiểm tra 📝, nhưng không kiểm tra gì liên quan đến internationalization cả 🚫.

damon-gabrielle:
Hiểu rồi, thông tin này hữu ích lắm 🙌. Thú vị thật, trong khi tôi lo về việc mở rộng getByRole 📈, tôi cũng đang muốn dùng aria label cho các bài kiểm tra AI-driven nữa 😆🤖

marshmn:
getByTestId cũng không phải viên đạn bạc bảo vệ bạn khi ứng dụng thay đổi đâu 🔫. Dù dùng getByRole hay getByTestId, bạn vẫn phải cập nhật bài kiểm tra khi ứng dụng thay đổi 🔄. Điều quan trọng nhất, theo tôi, là đảm bảo các bài kiểm tra chạy nhanh và hiệu quả ⚡, để chúng được thực hiện sau mỗi commit – giúp phát hiện ngay các thay đổi cần điều chỉnh 🚀.

Lời kết

Bài viết được trích từ một discussion trên cộng đồng discord Playwright.

Ý kiến của bạn về câu hỏi này thế nào? Hãy comment cho tụi mình biết nhé ^^.

Cảm ơn bạn, vì đã đọc bài.

Phong Do
Tác giả
Phong Do