Tự động hóa
Các node bấm, gõ và vuốt
Bấm, Gõ chữ, Vuốt, Kéo thả và các node còn lại: toạ độ hay element, vì sao vuốt đo bằng % màn hình, và vì sao kéo thả đôi khi không ăn.
8 phút đọc
Chín node này là đôi tay của kịch bản: bấm, gõ, vuốt, kéo thả và xoay màn hình. Mọi node khác quyết định có làm hay không; nhóm này quyết định làm cái gì trên mặt kính. Phần lớn nằm ở nhóm Thao tác (INTERACTION) của thư viện; hai node không nằm ở đó thì tới chỗ nào sẽ nói chỗ đó.
Quyết định đầu tiên: toạ độ hay element
Gần như node nào ở đây cũng hỏi Cách xác định vị trí, và phần gợi ý giải thích bằng chữ dễ hiểu: "Element là một thành phần trên màn hình (nút, ô nhập, dòng chữ). Chọn tọa độ cố định, hoặc để máy tự tìm element rồi bấm vào đó."
Toạ độ là một điểm chết. Đặt thì nhanh, mà hỏng ngay khi có gì đó xê dịch — hiện thêm một banner, tên tài khoản dài hơn, máy khác kích thước. Element thì được mô tả bằng nó là cái gì, nên máy tự tìm ra dù nó nằm ở đâu.
Cứ dùng element trừ khi hết đường. Cách tìm xem một element tên là gì có ở bài Tìm element bằng UI Inspector, còn cách mô tả nó ở bài So khớp element trên màn hình. Còn việc kiểm xem element có thật sự nằm đó hay không trước khi bấm lại là việc khác, do nhóm node trong bài Các node đọc màn hình đảm nhiệm.

Hai ô bạn sẽ gặp đi gặp lại
Nhiều node trong nhóm này có chung hai ô phụ, hiểu một lần là dùng được mãi.
Chờ sau khi chạy (ms) — "Nghỉ sau mỗi lần thực hiện, trước khi đi tiếp — máy chọn ngẫu nhiên trong khoảng này, hai đầu bằng nhau là nghỉ cố định. Đi nhánh Lỗi thì không nghỉ". Cái này thường tốt hơn cắm riêng một node Chờ (Wait), vì khoảng nghỉ gắn liền với đúng thao tác cần nó.
Thử lại khi lỗi, đi kèm Số lần thử lại và Nghỉ giữa các lần thử (ms) — "Thất bại → nghỉ khoảng này → thử lại. Hết lượt mới đi nhánh Lỗi".
Thử lại thì thời gian nhân lên, và phần gợi ý tính sẵn hộ bạn: "Số lần thử LẠI, không tính lần chạy đầu (tổng số lần chạy = giá trị + 1). Thời gian xấu nhất = thời gian chờ của node × (số lần + 1) + nghỉ giữa các lần × số lần — chờ 15 giây + thử lại 5 lần là cả phút."
Chỉ một node cài như vậy đã ngốn một phút trong quỹ 30 phút của lượt chạy. Nhét nó vào trong vòng lặp thì một bước duy nhất đốt sạch cả quỹ — xem cảnh báo TIMEOUT ở bài Các node điều khiển luồng chạy.
Bấm
Bấm (Click) thì bấm xuống màn hình. Ngoài phần chọn vị trí, có ba ô đáng để ý.
Vị trí (Position) quyết định bấm cái thứ mấy khi có nhiều thứ cùng khớp: "Nếu có nhiều element cùng khớp, chọn cái thứ mấy — đếm từ 0. Bỏ trống là lấy cái đầu tiên." Dòng thứ ba trong danh sách là Position 2, không phải 3.
Số lần bấm cho bấm nhiều hơn một cái, còn Kiểu bấm chọn kiểu nhấn.
Lệch ngẫu nhiên là ô thú vị nhất, và nên đọc trọn phần gợi ý: "Biên độ lệch, tính theo % kích thước element: điểm bấm rơi ngẫu nhiên trong khoảng ±(% × nửa chiều rộng) quanh tâm. 0% là luôn bấm đúng tâm, 100% là rơi bất kỳ đâu trong element — không bao giờ ra ngoài element. Bấm nhiều lần thì mỗi lần tính lại một điểm mới. Bấm theo toạ độ thì luôn là 0%."
Tức là nó không bao giờ bấm trượt ra ngoài nút. Nó chỉ làm cho các lần bấm thôi rơi vào đúng một điểm ảnh duy nhất — thứ mà người thật không bao giờ làm được. Để ý câu cuối: bấm theo toạ độ thì ô này vô tác dụng.
Gõ chữ
Gõ chữ (Type text) đưa nội dung vào một ô nhập, và cái bẫy lớn nhất của nó nằm ngay ở gợi ý của ô Ô nhập (tuỳ chọn):
"Bấm vào đây trước khi gõ. “Không chọn” = gõ vào ô đang focus — nhớ tự click ô trước đó, không thì chữ rơi vào hư không. Chọn element mà hết thời gian chờ không thấy thì đi nhánh Lỗi."
Đây là kiểu hỏng phổ biến nhất khiến một kịch bản chạy trơn tru mà chẳng làm được gì. Hoặc chọn ô nhập ngay trong node này, hoặc bảo đảm có một node Bấm đã bấm trúng ô đó trước.
Xóa nội dung cũ trước khi gõ dọn sạch thứ đang nằm trong ô — bật lên khi ô có thể còn giá trị của lượt trước.
Chờ giữa mỗi ký tự (ms) quyết định chữ vào kiểu nào: "Đặt 0–0 là dán cả chuỗi một lần; đặt khoảng lớn hơn thì gõ từng ký tự cho giống người thật". Dán thì nhanh; gõ từng ký tự chậm hơn nhưng giống một người đang ngồi gõ phím.
Vuốt
Vuốt (Swipe) cuộn màn hình theo một hướng. Quãng đường không tính bằng điểm ảnh:
Quãng vuốt (% màn hình) được "Tính theo % chiều màn hình nên máy nào cũng vuốt được như nhau, không phụ thuộc độ phân giải". Chính vì vậy đừng bao giờ quy một cú vuốt ra số pixel — 50% là nửa màn hình trên mọi cái máy bạn sẽ chạy.
Thời gian vuốt (ms) — "Vuốt càng chậm càng giống người thật. Máy chọn ngẫu nhiên một giá trị trong khoảng này".
Số lần vuốt lặp lại cử chỉ đó, còn Nghỉ sau mỗi lần vuốt (ms) chèn một khoảng nghỉ ngẫu nhiên giữa các lần — "lần cuối cũng nghỉ".
Vuốt tới khi thấy
Vuốt là cử chỉ mù; Vuốt tới khi thấy (Swipe until found) thì có mục tiêu — cũng vì thế mà thư viện xếp nó vào nhóm Element (ELEMENTS) chứ không xếp chung với các cử chỉ kia. Nó "Vuốt liên tục cho tới khi tìm được phần tử hoặc hết lượt". Dùng nó mỗi khi thứ bạn cần nằm đâu đó phía dưới một danh sách mà bạn không biết còn xa bao nhiêu.
Số lượt vuốt tối đa là cái trần: "Hết số lượt này mà chưa thấy thì đi nhánh “Sai”". Đó là một kết cục bình thường chứ không phải lỗi — hãy nối nhánh Sai tới thứ cần làm khi "không có trong danh sách".
Quãng vuốt của nó mặc định thấp hơn node Vuốt thường, và là cố ý: "Mặc định 30 — thấp hơn node Vuốt để không nhảy qua mất phần tử cần tìm." Và nó nghỉ xong mới kiểm: "Vuốt xong nghỉ một khoảng bốc ngẫu nhiên trong này rồi mới kiểm tra element".
Kéo thả
Kéo thả (Drag & drop) dời một thứ từ chỗ này sang chỗ khác. Điểm kéo đi và Điểm thả xuống đều "Chọn theo toạ độ hoặc theo phần tử trên màn hình", nên bạn kéo được một element thả lên một element khác.
Giữ trước khi kéo (ms) mới là ô quyết định thao tác có ăn hay không:
"Nhấn giữ yên tại điểm nhấc bấy nhiêu trước khi kéo; máy chọn ngẫu nhiên trong khoảng này, không cộng thêm lệch ẩn nào. Nhiều app phải giữ ≥500ms mới nhận là thao tác kéo — để 0–0 là kéo ngay."
Kéo mãi không ăn trong một app rõ ràng có hỗ trợ kéo thả, thì đây là ô đầu tiên cần nâng lên.
Thời gian kéo (ms) là quãng di chuyển: "Kéo càng lâu càng giống thao tác tay".
Bấm phím
Bấm phím (Press key) bấm một phím cứng — "Back, Home, Enter, Del…" — và thường là đường ngắn nhất để thoát khỏi một màn hình. Back đóng hộp thoại mà khỏi phải đi tìm nút đóng. Enter gửi biểu mẫu mà khỏi cần tìm nút gửi.
Số lần lặp bấm liên tiếp cùng một phím, và gợi ý cho luôn ca dùng: "Xoá 5 ký tự là phím Del, số lần 5–5".
Cặp đôi bàn phím
Bàn phím ảo che phần dưới màn hình, và nó nuốt luôn thứ đang nằm bên dưới.
Ẩn bàn phím (Hide keyboard) đóng nó lại. Với tới node này ngay sau khi Gõ chữ, trước khi định bấm một nút nằm gần đáy màn hình.
Bàn phím đang mở? (Keyboard open?) rẽ nhánh theo việc bàn phím có đang hiện hay không. Dùng khi bạn không chắc trạng thái — ví dụ một kịch bản đi tới cùng một màn hình bằng hai đường, và chỉ một trong hai đường là bàn phím đang bật.
Xoay màn hình
Xoay màn hình (Rotate screen), trong thư viện nằm ở nhóm Thiết bị (DEVICE), đặt màn hình về một chiều cố định qua ô Chiều màn hình. Dùng cho app và game chỉ chạy đúng ở chiều ngang.
Đổi chiều màn hình là đổi luôn ý nghĩa của toạ độ. Bước nào chỉnh bằng toạ độ lúc màn dọc thì sau khi xoay sẽ nhắm vào một chỗ khác hẳn. Thêm một lý do nữa để nhắm vào element thay vì nhắm vào điểm.
Tóm tắt
- Nhắm vào element, đừng nhắm toạ độ; chỉ lùi về toạ độ khi không còn gì để so khớp.
- Chờ sau khi chạy và Thử lại khi lỗi xuất hiện ở hết node này tới node kia — và thử lại thì nhân thời gian: chờ 15 giây + thử lại 5 lần là hơn một phút trong quỹ 30 phút.
- Gõ chữ với ô nhập để "Không chọn" là gõ vào ô đang focus, nên phải bấm vào ô trước, không thì chữ rơi vào hư không.
- Vuốt đo bằng % màn hình — đó là thứ làm một kịch bản chạy được trên nhiều loại máy. Vuốt tới khi thấy hết lượt thì đi nhánh Sai, không phải nhánh lỗi.
- Kéo mãi không ăn thì thường là phải tăng Giữ trước khi kéo — nhiều app đòi ít nhất 500 ms.