Bài 02 · Chờ và xác minh
Flow của Bài 01 có một khiếm khuyết: nó cho rằng cú chạm đã ăn. Bài này khiến flow chứng minh điều đó.
Bài toán
Chạm Claim Daily trên dashboard của Practice App và một popup phần thưởng mở ra — sau một hiệu ứng ngắn. Automation của bạn cần biết: popup có thực sự mở không?
Một node Click báo Success ngay khi cú chạm được gửi đi. Nó không hề biết chuyện gì xảy ra trên màn hình sau đó. Mọi flow đáng tin cậy bạn sẽ xây đều lấp khoảng trống ấy theo cùng một cách: hành động → chờ ổn định → xác minh.
Bạn sẽ học được
- Vì sao hành động không chờ, và vì sao đó là chủ ý thiết kế.
- Khuôn mẫu hành động → chờ ổn định → xác minh.
- Node phát hiện đầu tiên của bạn, với hai lối ra mang nghĩa.
- Cho thành công và thất bại hai kết thúc khác nhau.
Trước khi bắt đầu
- Hoàn thành Bài 01.
- Practice App mở tại
dashboard.html.
Flow

Dựng flow
- Tạo flow mới. Thêm Click tên
1. Tap Claim Daily, vùng vẽ quanh nút Claim Daily. - Thêm Wait (Chờ) tên
2. Let the popup animate. Thời lượng800ms, và điềnpopup open animationvào ô Reason — sáu tháng nữa bạn sẽ muốn biết con số này tồn tại vì lý do gì. - Thêm Find Image (Tìm ảnh) tên
3. Did the popup open?. Trên Live Preview, khi popup đang m ở (dashboard.html?popup=1), dùng Capture Template để bắt biểu tượng ngôi sao của popup. Timeout3000ms. - Thêm hai Stop:
Stop: verified(success, thông điệpPopup opened) vàStop: not verified(failure, thông điệpPopup did not open). - Nối: Start → Click → Wait → Find Image; Find Image Success → verified, Failure → not verified.
- Save, Auto Layout.
Vì sao dùng từng node
| Node | Vai trò | Truyền đi cái gì |
|---|---|---|
| Click | Thực hiện cú chạm | Không gì node sau dùng — chỉ quyền điều khiển |
| Wait | Hấp thụ thời gian hiệu ứng | Quyền điều khiển, sau 800 ms |
| Find Image | Bước xác minh: liên tục chụp màn hình mới và so template | Route của nó — Success (thấy) hoặc Failure (không thấy kịp lúc) |
| Hai Stop | Biến phán quyết thành hai kết cục rõ ràng | Trạng thái cuối + thông điệp |
Vì sao Wait quan trọng: phát hiện đọc một ảnh chụp màn hình mới. Không có bước chờ, Find Image có thể vớ đúng khung hình giữa hiệu ứng — hoặc trước khi popup kịp tồn tại — và báo "không thấy" với một popup sắp hiện ra.
Vì sao Find Image kiêm luôn vai trò chờ: nó chụp lại và so lại mỗi chu kỳ poll (250 ms) cho đến khi khớp hoặc hết 3000 ms timeout. Nó trả về ngay khoảnh khắc biểu tượng xuất hiện. Nên 800 ms Wait cộng 3000 ms timeout không phải "3,8 giây chờ đợi" — lần chạy điển hình xác minh xong trong khoảng một giây.
Khi Find Image hết giờ mà không khớp, status của nó vẫn là success — bản thân việc tìm kiếm đã chạy đúng. Chỉ route là Failure. Sự phân biệt này xuyên suốt sản phẩm: một lần không-thấy không bao giờ kích hoạt retry và không bao giờ tính vào ngưỡng lỗi liên tiếp. Mô hình thực thi giải thích tại sao.
Chạy thử
Chạy trên dashboard trơn. Kỳ vọng: popup mở, Find Image khớp trong vòng một giây, lần chạy kết thúc success / Popup opened.
Giờ thử ca âm tính: tắt trang (hoặc điều hướng giả lập đi chỗ khác) rồi chạy lại. Cú chạm không trúng gì, popup không mở, và sau 3 giây lần chạy kết thúc failure / Popup did not open — flow nói cho bạn sự thật thay vì giả vờ.
Best practices
- Xác minh mọi hành động quan trọng. Chạm → chờ → kiểm là xương sống của automation đáng tin.
- Điền ô Reason của Wait. Những khoảng chờ không ghi chú là cách flow mục nát dần.
- Cho hai kết cục hai Stop với hai thông điệp. Một Stop dùng chung che mất chuyện thực sự xảy ra.
- Bắt template ôm sát. Riêng biểu tượng ngôi sao, không phải cả popup — pixel nền là thứ phá vỡ so khớp về sau.
Lỗi thường gặp
| Lỗi | Hậu quả | Cách sửa |
|---|---|---|
| Không chờ trước khi xác minh | Phát hiện đọc khung hình giữa hiệu ứng | Giữ node Wait |
| Xác minh bằng một Wait mù khác | Sau nó bạn không biết thêm gì | Xác minh bằng phát hiện |
| Một Stop cho cả hai kết cục | Nhật ký không phân biệt được thành/bại | Hai Stop, hai thông điệp |
| Template dính nền popup | So khớp vỡ khi bất kỳ thứ gì xê dịch | Cắt sát biểu tượng |
Khắc phục sự cố
Xác minh trượt dù popup đã mở. Tăng Wait lên 1200 ms — máy chậm chạy hiệu ứng lâu hơn. Vẫn trượt thì bắt lại template; nhiều khả năng nó dính nền.
Xác minh đậu tức thì cả khi không có popup. Template của bạn quá chung chung và khớp thứ khác trên màn hình. Bắt lại một mảnh cắt chặt hơn, đặc trưng hơn.
Flow chạy chậm. Không nên thế — Find Image trả về ngay lần khớp đầu. Nếu lần nào cũng ngốn trọn timeout, template không bao giờ khớp và bạn đang sống trên nhánh Failure; sửa template đi.
Tóm tắt
- Hành động báo "đã gửi", không phải "đã ăn". Hành động → chờ → xác minh.
- Node phát hiện vừa là phép kiểm vừa là phép chờ thông minh — nó trả về ngay khi điều kiện thỏa.
- Route của phát hiện (thấy / không thấy) tách khỏi status, và mỗi kết cục xứng đáng một Stop riêng.