Kiểm tra nội dung clipboard
Kiểm tra clipboard của hệ điều hành bằng cách dán vào ô tìm kiếm hệ thống và xác nhận nội dung.
Một trong những thứ khó test nhất trong automation mobile là clipboard hệ thống. Astra Scout có sẵn lệnh copyTextFrom và pasteText, nhưng chúng dùng shim, một clipboard mô phỏng được thiết kế cho tốc độ.
Nhưng nếu bạn cần xác nhận nút "Copy to Clipboard" thực sự hoạt động ở cấp OS thì sao? Có thể bạn đang làm app ngân hàng và cần đảm bảo mã BIC được sao chép đúng, hoặc app mạng xã hội chia sẻ liên kết giới thiệu. Trong các trường hợp này, ta cần thoát khỏi sandbox của app và dùng UI gốc của điện thoại làm nơi kiểm tra.
Ghi công
Cách tiếp cận này do team GlossGenius tiên phong để giải quyết các bài toán kiểm tra clipboard thực tế.
Quy trình
Vì Astra Scout không thể đọc clipboard của OS vào biến trực tiếp, ta có thể kiểm tra nội dung clipboard trong một ô văn bản có sẵn trên mọi device:
- Vào Màn hình chính.
- Mở thanh tìm kiếm hệ thống (Spotlight trên iOS, Google Search trên Android).
- Dán nội dung vào đó.
- Dùng lệnh
assertVisibleđể kiểm tra văn bản đã xuất hiện chưa.
1. Flow kiểm tra tái sử dụng
Trước tiên, tạo một flow (ví dụ check_clipboard.yaml) xử lý logic riêng của từng nền tảng để dán vào ô tìm kiếm hệ thống. Lệnh runFlow kết hợp điều kiện when được dùng để xử lý khác biệt trong cách iOS và Android quản lý widget tìm kiếm.
# check_clipboard.yaml
# Yêu cầu: iOS 18 Simulator / Android API 34 Emulator
# Biến môi trường cần có: EXPECTED_CONTENTS (chuỗi bạn mong đợi có trong clipboard)
appId: ${APP_ID}
---
# Bước 1: thu nhỏ app. Giống như người dùng bấm nút Home.
- pressKey: Home
# Bước 2: tìm chỗ để "ghi" nội dung clipboard.
# Ở đây dùng thanh tìm kiếm gốc của nền tảng.
- runFlow:
when:
platform: Android
commands:
- tapOn: Search # Nhắm vào widget ở Màn hình chính
- tapOn:
id: input # Focus ô nhập tìm kiếm
- longPressOn:
id: input
- tapOn: Paste
- runFlow:
when:
platform: iOS
commands:
- pressKey: Home # Lần bấm thứ hai đảm bảo ta ở trang đầu của màn hình chính
- tapOn: Search # Nhắm vào "viên thuốc" tìm kiếm của iOS
- longPressOn:
id: SpotlightSearchField
- tapOn: Paste
# Bước 3: assertion
# Kiểm tra ô tìm kiếm cấp OS giờ có chứa văn bản mong đợi không
- assertVisible: ${EXPECTED_CONTENTS}
# Bước 4: dọn dẹp
# Xóa ô tìm kiếm tường minh và đặt clipboard thành một giá trị giả đã biết để đảm bảo test độc lập
- runFlow:
when:
platform: Android
commands:
- tapOn: Clear search box
- inputText: Hello World
- longPressOn:
id: input
- tapOn: Select all
- tapOn: Cut
- runFlow:
when:
platform: iOS
commands:
- tapOn: Clear text
- inputText: Hello World
- longPressOn:
id: SpotlightSearchField
- tapOn: Select All
- tapOn: Cut
# Bước 5: quay lại app
- launchApp:
stopApp: false # Đưa app trở lại foreground mà không khởi động lạiBằng cách điều hướng tới Màn hình chính, bạn có thể truy cập các phần tử cấp hệ thống không khả dụng khi app đang được focus. Dùng các ID như SpotlightSearchField cho phép bạn tương tác đáng tin cậy với thanh tìm kiếm của OS.
Cần lưu ý rằng, khác với hầu hết test mà launchApp khởi động app từ đầu, trong subflow này bạn đặt stopApp: false. Nhờ vậy Astra Scout chỉ đưa app trở lại focus. Session của người dùng vẫn ở đúng chỗ trước khi nút Home được bấm, cho phép test tiếp tục liền mạch.
2. Triển khai
Để dùng flow check_clipboard.yaml trong test chính, bạn cần truyền EXPECTED_CONTENTS dưới dạng biến môi trường. Sau khi lưu partial, bạn có thể gọi nó bằng một lệnh duy nhất bằng cách chỉ định văn bản bạn mong đợi tìm thấy trong clipboard:
# main_test.yaml
- runFlow:
file: ../partials/check_clipboard.yaml
env:
EXPECTED_CONTENTS: MaestroNội dung liên quan
Khám phá các trang tài liệu sau nếu một số khái niệm dùng trong ví dụ này chưa rõ với bạn:
- Flow lồng nhau: tìm hiểu cách tổ chức test bằng cách chia thành các flow nhỏ hơn.
- Điều kiện: xem kỹ cách tham số
whencho phép bạn viết một test duy nhất chạy trên cả iOS và Android. - runFlow: xem chi tiết cách dùng lệnh
runFlow.
