Bỏ qua, đến nội dung

Lệnh chờ ​

Điều khiển thời gian chờ cho animation, cuộc gọi mạng và cập nhật UI bằng các command wait.

Trong thế giới lý tưởng, app phản hồi tức thì. Thực tế, độ trễ mạng, animation chậm và xử lý nền có thể làm test fail vì flow cố tương tác với một phần tử chưa sẵn sàng.

Astra Scout cung cấp nhiều cách xử lý các issue thời gian này. Hướng dẫn này giúp bạn chọn chiến lược phù hợp để flow bền vững và nhanh.

Chờ tự động ​

Trước khi dùng lệnh chờ riêng, hãy nhớ rule vàng về thời gian trong flow:

Nếu bạn mong một phần tử xuất hiện hoặc biến mất trong khoảng thời gian ngắn, hãy dùng assertion.

Assertion rất thông minh. Chúng không chỉ kiểm tra một lần rồi báo fail, mà liên tục poll UI cho đến khi phần tử xuất hiện hoặc hết thời gian. Nhờ đó đây là cách chờ hiệu quả nhất, vì test tiếp tục ngay khi điều kiện được thỏa.

  • assertVisible: tốt nhất để chờ màn hình tải xong, thông báo thành công xuất hiện hoặc nút trở nên bấm được.
  • assertNotVisible: tốt nhất để chờ spinner loading biến mất hoặc modal đóng lại.
yaml
# Ví dụ assertVisible
- tapOn: "Submit"
- assertVisible: "Success!" # Astra Scout sẽ chờ phần tử này xuất hiện

Chiến lược chờ ​

Khi assertion chưa đủ, như với tiến trình chạy lâu hoặc để ổn định animation phức tạp, bạn có thể dùng một trong các lệnh chờ chuyên biệt.

Chờ tiến trình dài (extendedWaitUntil) ​

Dùng extendedWaitUntil cho các phản hồi mạng chậm (như xử lý thanh toán hay tạo báo cáo lớn) chắc chắn mất nhiều hơn vài giây.

Lệnh này tối ưu test vì Astra Scout đi tiếp ngay nếu phần tử xuất hiện sớm hơn timeout.

yaml
- extendedWaitUntil:
    visible: "Payment Confirmed"
    timeout: 30000            # Chờ tối đa 30 giây

Mẹo: đặt timeout thực tế

Tránh đặt mọi timeout là 60 giây. Nếu một màn hình đáng lẽ tải trong 5 giây, hãy để assertion mặc định xử lý. Cách này giúp phát hiện sớm các hồi quy về hiệu năng.

Chờ UI ổn định (waitForAnimationToEnd) ​

Đôi khi phần tử đã hiển thị nhưng vẫn đang chuyển động (ví dụ danh sách đang trượt vào vị trí hoặc menu bên đang mở). Tương tác quá sớm có thể làm hụt thao tác chạm.

Dùng lệnh waitForAnimationToEnd để đảm bảo test chỉ tiếp tục sau khi animation kết thúc.

yaml
- waitForAnimationToEnd:
    timeout: 5000 # Chờ tối đa 5 giây cho chuyển động dừng lại

Mẹo: ghost tap

Nếu gặp "ghost tap" (chạm vào nút có tồn tại nhưng chưa bấm được), hãy kết hợp logic chờ với retryTapIfNoChange: true trong lệnh tapOn.

Step tiếp theo ​

Để xem chi tiết kỹ thuật đầy đủ và danh sách tham số, xem trang của từng lệnh:

Hoặc tiếp tục tìm hiểu về điều khiển flow qua các hướng dẫn Vòng lặp hoặc Điều kiện.