Khi gặp các bài toán automation khó, đặc biệt là các màn hình có UI động như text, id, class hoặc cấu trúc DOM thay đổi liên tục, cách xử lý hiệu quả nhất không phải là “tìm cho ra một XPath đúng”, mà là tiếp cận bài toán theo hướng phân tích tính ổn định của giao diện và hành vi của ứng dụng.

Trước hết, cần hiểu rõ phần nào của UI là động và phần nào là ổn định. Trong nhiều hệ thống, id hoặc text hiển thị có thể thay đổi theo dữ liệu, theo ngôn ngữ hoặc theo phiên bản, nhưng vị trí logic của phần tử trong màn hình, quan hệ cha–con, hoặc vai trò của phần tử (ví dụ nút xác nhận, ô nhập tìm kiếm, danh sách kết quả…) thường vẫn giữ nguyên. Vì vậy, thay vì phụ thuộc vào id hoặc text tuyệt đối, nên ưu tiên xây dựng locator dựa trên các thuộc tính ổn định hơn như structure, role, name, aria-label, data-testid, hoặc các thuộc tính kỹ thuật do đội phát triển cung cấp.

Một hướng xử lý rất quan trọng đối với UI dynamic là chủ động làm việc với đội phát triển để bổ sung các locator “dành cho automation”, ví dụ như data-test, data-qa hoặc automation-id. Đây là cách bền vững nhất, giúp test script không bị vỡ mỗi khi giao diện thay đổi nhỏ về hiển thị.

Trong trường hợp bắt buộc phải làm việc với text hoặc id thay đổi, nên chuyển sang sử dụng các locator có tính linh hoạt hơn, chẳng hạn như contains, starts-with, hoặc kết hợp nhiều điều kiện thay vì so khớp chính xác một giá trị. Tuy nhiên, cần kiểm soát để locator không trở nên quá “rộng”, tránh việc match nhầm nhiều phần tử.

Đối với các màn hình dynamic theo dữ liệu (ví dụ danh sách sinh ra theo API, theo người dùng, theo thời điểm), hướng tiếp cận nên chuyển từ việc xác định chính xác một phần tử cụ thể sang việc xác định một tập phần tử, sau đó lọc bằng logic trong code hoặc keyword. Ví dụ, lấy toàn bộ danh sách item trên màn hình, rồi tìm item thỏa điều kiện mong muốn dựa trên nội dung, trạng thái hoặc thuộc tính.

Một vấn đề thường đi kèm UI dynamic là thời điểm phần tử xuất hiện không ổn định. Vì vậy, bên cạnh locator, chiến lược wait cũng rất quan trọng. Cần ưu tiên sử dụng wait theo điều kiện thực tế của phần tử như xuất hiện, hiển thị, có thể click, hoặc hoàn thành load dữ liệu, thay vì dùng sleep cố định. Điều này giúp giảm flaky test khi UI thay đổi chậm hoặc nhanh hơn bình thường.

Ngoài ra, khi UI quá động và khó kiểm soát ở mức giao diện, nên cân nhắc lại phạm vi automation UI. Một hướng xử lý thực tế là đẩy một phần kiểm tra logic xuống API hoặc layer phía dưới, chỉ giữ lại các bước UI mang tính xác nhận luồng chính. Cách này giúp giảm phụ thuộc vào giao diện và làm cho bộ test ổn định hơn.

  Kết luận: Đối với các bài toán automation khó như UI dynamic, tư duy đúng là tách vấn đề thành ba phần: chọn locator ổn định, đồng bộ đúng thời điểm hiển thị của UI và giảm phụ thuộc không cần thiết vào giao diện. Automation hiệu quả không nằm ở việc viết XPath phức tạp, mà nằm ở việc thiết kế chiến lược test phù hợp với mức độ biến động của hệ thống.

Sửa lần cuối: Thứ Hai, 2 tháng 3 2026, 8:56 AM