Bỏ qua, đến nội dung

Reset trạng thái device (Android) ​

Dùng app File của Android để xoá media và file tải về cũ, đưa device về trạng thái sạch.

Các run test liên tiếp dùng addMedia để nhập ảnh hoặc tải file có thể để Android emulator của bạn ở trạng thái không nhất quán. File cũ từ run trước có thể gây kết quả dương tính giả, khi test thành công chỉ vì dữ liệu từ lần trước vẫn còn, hoặc gây fail vì đống file tồn đọng khiến flow không tìm được file bạn vừa thêm.

Để đảm bảo bắt đầu thật sự sạch, bạn có thể tự động hóa app Files của hệ thống để xoá các thư mục này trước hoặc sau khi bộ test chạy.

Ghi công

Công thức này được chia sẻ bởi AJ Owens, thành viên của cộng đồng Slack của Maestro, nhằm giải quyết issue media tồn đọng trên các emulator dùng chung.

Quy trình ​

Vì các file này nằm ngoài sandbox của app, bạn cần tương tác trực tiếp với app Files của Android (trình quản lý file mặc định trên emulator Google APIs). Logic theo mẫu "tìm rồi xoá":

  1. Thoát app và mở App Drawer của Android để mở app Files.
  2. Dùng menu hamburger để nhảy thẳng tới Images hoặc Downloads.
  3. Kiểm tra xem trình quản lý file có thực sự hiển thị ảnh thu nhỏ hay không.
  4. Dùng lệnh Select all và Delete của hệ thống để xoá toàn bộ thư mục trong một thao tác.

1. Flow dọn dẹp ​

Flow này được thiết kế để chạy trên Android API 30 đến 34. Bạn có thể chạy nó như một flow độc lập hoặc gọi như subflow.

yaml
# clean_device_android.yaml
# Chiến lược: dùng app Files gốc để xóa Images và Downloads.

# Bước 1: mở app Files
- pressKey: home
- swipe:
    direction: UP
- tapOn: Files

# Bước 2: xóa ảnh
- tapOn: Show roots      # Menu hamburger
- tapOn:
    text: Images
    index: 1             # Bỏ qua chip bộ lọc ở trang chính
- tapOn: Pictures

# Bước 3: dọn dẹp có điều kiện
# Chỉ tiếp tục nếu thấy ảnh thu nhỏ (icon_thumb).
- runFlow:
    when:
      visible:
        id: "com.google.android.documentsui:id/icon_thumb"
    commands:
      - tapOn: More options
      - tapOn: Select all
      - tapOn: Delete
      - tapOn: OK

# Bước 4: xóa file tải về
- tapOn: Show roots
- tapOn: Downloads

- runFlow:
    when:
      visible:
        id: "com.google.android.documentsui:id/icon_thumb"
    commands:
      - tapOn: More options
      - tapOn: Select all
      - tapOn: Delete
      - tapOn: OK

Tương tác với app hệ thống đòi hỏi nhắm vào các resource ID không nằm trong mã nguồn app của bạn. Flow dọn dẹp được cấu trúc như vậy vì các lý do sau:

  • Nó dùng ID từ package com.android.documentsui (app Files gốc) thay vì văn bản để đảm bảo ổn định qua các phiên bản Android.
  • Bằng cách kiểm tra trước việc id: icon_thumb có hiển thị, test chạy hiệu quả hơn. Nếu thư mục đã trống, flow không phải tìm nút Select all không tồn tại.
  • Thay vì xoá từng file, vốn chậm, nó dựa vào hành động Select all gốc.

2. Triển khai ​

Vì flow này tương tác với OS, nó không cần là một phần của điều hướng chính trong app. Bạn có thể chạy clean_device_android.yaml riêng từ Astra Scout (xem Chạy flow) trước một session để bắt đầu với emulator sạch.

Bạn cũng có thể gọi nó như subflow trong test chính để xoá media cụ thể sau khi test tải file xong, hoặc tự động hóa việc dọn dẹp bằng cách gọi nó trong một Hook; thêm vào onFlowComplete đảm bảo app ở trạng thái "trung tính" cho test tiếp theo:

yaml
# main_test.yaml
- tapOn: "Download Report"
- assertVisible: "Report.pdf"
# Tự dọn dẹp sau khi xong
- runFlow: ../utils/clean_device_android.yaml
yaml
onFlowComplete:
  runFlow: ../utils/clean_device_android.yaml
---
# Flow của bạn

Khám phá các trang sau để tìm hiểu thêm về các lệnh dùng để quản lý file và điều hướng hệ thống:

  • Điều kiện: xem lại cách dùng tham số when để logic dọn dẹp bỏ qua các step không cần thiết.
  • Hook: tìm hiểu cách tự động kích hoạt flow dọn dẹp này trước hoặc sau mỗi run test.