Bỏ qua, đến nội dung

Tải về và mở file ​

Tự động hóa quy trình tải và mở file trên device di động.

Tự động hóa việc tải file là yêu cầu phổ biến, nhưng test trên nhiều nền tảng có thể gây đau đầu. Giữa các hộp thoại hệ thống khác nhau, xác nhận tải về, và cách các phiên bản OS xử lý liên kết file, một thao tác chạm rồi mở đơn giản thường cần tinh tế hơn vẻ ngoài.

Công thức này minh họa cách kích hoạt tải file (lấy PDF làm ví dụ), đi qua các prompt hệ thống khác nhau xuất hiện trên Android và iOS, kiểm tra nội dung file, rồi quay lại app an toàn.

Quy trình ​

Vì việc xử lý file do trình quản lý file của hệ điều hành hoặc trình xem PDF hệ thống đảm nhiệm, test cần nối khoảng cách giữa app và UI hệ thống.

  1. Bắt đầu hành động trong app.
  2. Xử lý các prompt "Download again" hoặc xác nhận vị trí.
  3. Đảm bảo file mở trong trình xem hệ thống và kiểm tra văn bản cụ thể.
  4. Đóng trình xem để tiếp tục test trong app.

1. Tải về và kiểm tra file ​

Công thức này giả định app có một nút tên 'Maestro PDF' kích hoạt tải về một tài liệu chứa văn bản "This is a Maestro test".

yaml
# Bước 1: kích hoạt tải về trong app
- tapOn: 'Maestro PDF'

# Bước 2: xử lý file "cũ"
# Trên emulator cục bộ, file có thể còn từ lần chạy trước. 
# Ta dùng 'optional: true' để bỏ qua nếu prompt không xuất hiện.
- tapOn:
    text: 'Download again'
    optional: true

# Bước 3: xử lý xác nhận tải về riêng của Android
# Một số phiên bản Android (SDK 33/34) hỏi xác nhận vị trí 
# hoặc hiện snackbar "File downloaded" trước khi mở.
- runFlow:
    when:
      visible: 'Choose where to download'
    commands:
      - tapOn: 'Download'

- runFlow:
    when:
      # Nếu PDF chưa tự mở, tìm nút 'Open'
      notVisible: 'This is a Maestro test.*'
    commands:
      - assertVisible: 'File downloaded'
      - tapOn: 'Open'

# Bước 4: kiểm tra nội dung PDF
# Khi trình xem PDF hệ thống đã mở, ta assert văn bản hiển thị.
- assertVisible: 'This is a Maestro test.*'

# Bước 5: quay lại app
# Ta đóng trình xem hệ thống để về trạng thái của app.
- runFlow:
    when:
      platform: Android
    commands:
      - back
- runFlow:
    when:
      platform: iOS
    commands:
      - tapOn: 'Done'

Để đảm bảo nội dung file được phát hiện đáng tin cậy, công thức này dùng biểu thức chính quy trong assertion (This is a Maestro test.*). Cách này tính đến việc trình xem PDF có thể hiển thị văn bản kèm ký tự vô hình hoặc khoảng trắng ở cuối. Dùng biểu thức chính quy giúp assertion bền hơn trước các khác biệt nhỏ khi hiển thị.

Ngoài ra còn hai điểm quan trọng khác. Trên các phiên bản Android cũ, hệ thống có thể mở trình xem PDF ngay sau khi tải xong. Còn trên các bản mới (SDK 33+), người dùng thường dừng ở thông báo File downloaded. Bằng cách kiểm tra trước rằng nội dung notVisible, test chỉ thử chạm Open khi hệ điều hành chưa tự làm việc đó.

Cuối cùng, cờ optional: true ở step Download again là thiết yếu với device sạch hoặc vừa reset. Trên device mới tạo, prompt này sẽ không bao giờ xuất hiện, và cờ này ngăn test fail khi nó không hiện ra.

2. Triển khai ​

Để dùng logic này trong test, bạn có thể đưa trực tiếp vào flow chính hoặc lưu thành subflow tái sử dụng. Vì nó dựa vào văn bản cấp hệ thống, không cần thêm biến môi trường nào trừ khi bạn muốn tham số hóa văn bản mong đợi.

yaml
# main_test.yaml
- tapOn: 'Reports'
- runFlow: ../partials/download_and_verify_pdf.yaml

Khám phá các trang sau để tìm hiểu thêm về logic dùng để đi qua ranh giới hệ thống:

  • Selector: tìm hiểu cách dùng selector để làm assertion văn bản linh hoạt hơn.
  • Điều kiện: xem cách dùng visible và notVisible để xử lý logic UI rẽ nhánh.