Test mua hàng
Test flow mua hàng trên device test: cần chuẩn bị gì và các step mua hàng hoạt động ra sao.
Tester và QA test luồng mua hàng của app (mua gói đăng ký, dùng thử) mà không trả tiền thật. Họ kiểm paywall và các màn hình thanh toán.
Chạy app trên một device test (simulator hoặc iOS device/Android dùng riêng để test) với tài khoản sandbox. Sandbox là môi trường thử do Apple hoặc Google cung cấp: mọi giao dịch đều giả, không trừ tiền. Không dùng tài khoản hay thẻ thật.
Astra Scout không chặn các step mua hàng. Các step giống mua hàng trong flow, tự sửa bằng AI, Khám phá app và CLI (MCP) cứ thế chạy, và không có hộp thoại xác nhận trước một step mua hàng. Chỉ chạy trên device test đã chuẩn bị như bên dưới. Thứ hỏi bạn trước là việc gửi gì đó ra khỏi máy Mac, ví dụ một bug lên Jira (Chờ xác nhận, xem Jira) hoặc xoá lịch sử mua sandbox (xem Sandbox tester).
Các step mua hàng hoạt động ra sao
Trong Khám phá app
Khám phá app luôn đưa nút mua hàng và paywall cho AI, với nhãn "(mua hàng – sandbox)" trong tab Step. Sheet mua hàng là hộp thoại xác nhận thanh toán do hệ điều hành vẽ, không thuộc app của bạn. AI làm được gì trên sheet đó tuỳ loại device, mà Astra Scout tự nhận ra:
| Device | Môi trường store | AI làm được gì trên sheet mua hàng của hệ thống |
|---|---|---|
| iOS Simulator | StoreKit (cửa hàng giả lập của Xcode) | Bấm các control của sheet StoreKit |
| iOS device | iOS sandbox (môi trường thử của Apple) | Đọc sheet của hệ thống và bấm các nút của nó. Gõ mật khẩu sandbox nếu đã đặt SANDBOX_PASSWORD. |
| Android | Google Play license testing (tài khoản thử của Google Play) | Bấm các control của sheet Google Play |
AI không bao giờ gõ số thẻ hay mật khẩu khác. Ngoại lệ duy nhất là mật khẩu sandbox trên sheet mua hàng iOS của iOS device, mà runner lấy từ biến môi trường SANDBOX_PASSWORD. AI chỉ thấy ${SANDBOX_PASSWORD}, không bao giờ thấy giá trị.
Trên iOS device, Astra Scout đọc được sheet mua hàng của hệ thống, nên AI nhìn thấy và bấm được các nút của sheet. Trong lúc sheet đang mở, danh sách phần tử AI thấy là phần tử của sheet, không phải của app. Các nút có thể hoàn tất giao dịch được gắn nhãn "(mua hàng – sandbox)"; các nút đóng sheet thì không.
Khi Khám phá app dừng với Cần tester
Khám phá dừng với Cần tester khi AI không tự làm tiếp được và cần một người, trong các trường hợp sau. Lý do được ghi cạnh tiêu đề ở phần đầu kết quả.
- Một hộp thoại hệ thống đang che app và Astra Scout không đọc được nó.
- Một hộp thoại hệ thống không phải của store đang che app.
- Hộp thoại mật khẩu sandbox của App Store hiện ra mà môi trường không có
SANDBOX_PASSWORD. Thêm biến này (xem bên dưới) hoặc tự gõ mật khẩu. - Một hộp thoại mật khẩu của hệ thống thanh toán hiện ra ngoài sheet đọc được. Astra Scout không bao giờ gõ vào các hộp thoại này.
- Sau khi bấm nút mua trên iOS device, Astra Scout không xác nhận được sheet đã biến mất. Thông báo nói là AI "không thấy và không xác nhận được" hộp thoại. Xem flow mẫu
ios_device_sandbox_subscribe.
Khi dừng, lần khám phá kết thúc (kết luận là Bị chặn, không phải bug của app). Tự hoàn tất step đó trên iOS device. Nó không chạy tiếp: bắt đầu lần khám phá mới nếu muốn đi tiếp.
Trong flow
Sheet hệ thống là hộp thoại do iOS vẽ, như sheet xác nhận mua hàng. Khi nó che app trên iOS device, step tapOn, doubleTapOn, longPressOn, assertVisible hoặc inputText tìm phần tử của nó trên sheet và thao tác ở đó. Trên sheet hệ thống chỉ dùng được selector text và id (cộng với index). Step có phần tử không nằm trên sheet sẽ fail với SYSTEM_OVERLAY (có sheet hệ thống đang che app), và step bắt buộc sẽ chặn run.
Môi trường
Mỗi loại device cần một thiết lập riêng trước khi test mua hàng:
| Môi trường | Thiết lập |
|---|---|
iOS Simulator với StoreKit Configuration (file .storekit mô phỏng cửa hàng và các gói để test, không cần Apple) | Thêm file .storekit vào scheme của app và chạy app từ Xcode (Astra Scout không kiểm tra được điều này, nên bạn tự bảo đảm). Xoá giao dịch giữa các lần test bằng Debug > StoreKit > Manage Transactions trong Xcode. |
| iOS device với tài khoản Sandbox (tài khoản Apple thử, mua hàng không tính tiền) | Tạo Sandbox Tester trong App Store Connect và bật Allow Purchases & Renewals trong Settings > Developer > Sandbox Apple Account trên iOS device. Kết nối bằng USB, giữ máy mở khoá, bật Focus hoặc Do Not Disturb. |
| Android với License tester (tài khoản Google được phép mua thử) | Thêm tài khoản Google của device ở Setup > License testing trong Play Console, cài app từ một test track, và chỉ dùng thẻ test ("Test card, always approves"). |
Tài khoản đã từng mua sẽ không thấy lại ưu đãi dùng thử. Xoá lịch sử mua ngay trong Astra Scout (xem Sandbox tester), đặt lại trong App Store Connect, hoặc dùng tài khoản khác.
Chạy flow mua hàng trên iOS device
Chuẩn bị iOS device trước:
- Tạo Sandbox Tester trong App Store Connect (xem Sandbox tester).
- Trên iOS device, mở Settings > Developer > Sandbox Apple Account và bật Allow Purchases & Renewals. Nếu tắt, iOS báo "Purchase Failed" sau khi bạn bấm Subscribe.
- Trên iOS device, tắt Settings > Face ID & Passcode > iTunes & App Store, để thanh toán không hỏi Face ID hay passcode nữa và sheet chỉ hiện nút Subscribe.
- Dùng tài khoản sandbox chưa mua gói này.
Sau đó:
Đừng ghi mật khẩu trực tiếp trong flow. Lưu nó trong một môi trường, nơi giữ các biến như
SANDBOX_PASSWORD. Chọn Chạy > Quản lý môi trường… (hoặc mở menu môi trường trên thanh công cụ và chọn Quản lý môi trường…).Bấm Môi trường mới (hoặc dấu + ở trên cùng). Gõ một tên. Ở Biến môi trường, bấm Thêm biến, gõ
SANDBOX_PASSWORDlàm key và mật khẩu của tài khoản sandbox làm giá trị, rồi bấm Tạo. Giá trị hiện dưới dạng text thường trong sheet này. Bấm Xong.
Mở menu môi trường trên thanh công cụ và chọn môi trường của bạn. Khi chưa chọn, thanh công cụ ghi "Không có môi trường".
Kết nối iOS device (xem Device) và mở flow.
Bấm Chạy test (
Cmd+R) và theo dõi các step.

Flow
Giữ toàn bộ chuỗi thao tác trong một flow:
- tapOn: "6 Month" # nút trong app; sheet xuất hiện sau 1-12 giây
- tapOn: "Subscribe" # trên sheet; text thường phải khớp toàn bộ chuỗi
- tapOn: "Password" # ô mật khẩu sandbox
- inputText: ${SANDBOX_PASSWORD}
- tapOn: "Confirm"Text thường phải khớp toàn bộ text của phần tử, không phân biệt hoa thường, nên Subscribe không khớp một dòng như "…has subscribed…". Một regex như .*Subscribe.* cũng phải khớp toàn bộ text và có phân biệt hoa thường. Nếu text không có trên sheet, step sẽ fail với SYSTEM_OVERLAY. iOS không hỏi lại mật khẩu nếu bạn vừa nhập gần đây, nên các step mật khẩu có thể không cần ở run thứ hai; flow ví dụ flows/mydmv/purchase_6month_selectors.yaml xử lý việc này.
Khám phá app với mua hàng
Kết nối device test.
Chọn Device > Khám phá app… (
Shift+Cmd+E). Cửa sổ Khám phá app mở ra.Điền App (appId), chọn Persona, và có thể gõ Mục tiêu (không bắt buộc). Ở Giới hạn và an toàn, đặt Số step tối đa và Số phút tối đa. Nút thông tin ở đó nhắc lại các rule về mua hàng và mật khẩu.
Với iOS device, chọn môi trường chứa
SANDBOX_PASSWORDtrên thanh công cụ của cửa sổ chính trước khi bắt đầu. Lần khám phá dùng môi trường đang chọn vào lúc đó.
Bấm Bắt đầu khám phá. Theo dõi thẻ tiến độ. Trong tab Step, một lần bấm mua hiện như
Bấm "Subscribe" (mua hàng – sandbox).Khi kết thúc, phần đầu cho biết lý do: ví dụ AI kết thúc, Hết số step hoặc Cần tester.

