Bỏ qua, đến nội dung

Phát hiện Maestro ​

Phát hiện app đang chạy dưới tự động hóa của Astra Scout để bật hành vi riêng cho test.

Có lúc app của bạn cần hành xử khác đi khi đang được test. Dù bạn muốn bỏ qua màn hình 2FA, tắt analytics để không làm nhiễu dữ liệu production, hay trỏ tới mock server, việc phát hiện Maestro trong code app là nhu cầu phổ biến.

Vì sao cần phát hiện Maestro? ​

Phát hiện khi app đang được test là cách xử lý các tình huống vốn khó tự động hóa:

  • Bỏ qua 2FA: sửa flow xác thực để dùng mã cố định, không cần SIM vật lý hay hộp thư email.
  • Kiểm soát thời gian tồn tại của nội dung: giữ các thông báo ngắn hạn (như banner tạm thời) trên màn hình lâu hơn để Astra Scout đủ thời gian phát hiện và tương tác.
  • Chuyển đổi môi trường: tự động trỏ app tới mock server hoặc database staging để giữ dữ liệu production sạch.
  • Tắt animation tùy chỉnh: nếu app dùng animation đặc biệt mà waitForAnimationToEnd không bắt được, bạn có thể tắt chúng thủ công để tránh "ghost tap".

Mobile (iOS và Android) ​

Cách chuẩn mực để phát hiện Maestro trên mobile là dùng launchApp arguments. Cách này đáng tin cậy và tường minh.

Truyền đối số trong flow ​

Trong flow, dùng tham số arguments trong lệnh launchApp để gửi một cờ tùy chỉnh.

Thông tin: launch argument trong Astra Scout

Astra Scout truyền arguments cho maestro-runner, rồi maestro-runner chuyển chúng cho app lúc khởi chạy. Trên iOS chúng tới dưới dạng launch argument -key value, nên ProcessInfo.processInfo.arguments chứa -isMaestro. Hãy chạy thử nhanh để xác nhận cách truyền chính xác trên Android trước khi dựa vào nó.

yaml
- launchApp:
    appId: "com.example.app"
    arguments:
      isMaestro: "true"

Phát hiện đối số trong code ​

Sau đó app có thể kiểm tra cờ này trong giai đoạn khởi tạo.

Android (Kotlin/Java)

kotlin
val isMaestro = intent.getStringExtra("isMaestro") == "true"
if (isMaestro) {
    // Tắt analytics hoặc dùng dữ liệu giả
}

iOS (Swift)

swift
if ProcessInfo.processInfo.arguments.contains("isMaestro") {
    // Áp dụng cấu hình chỉ dành cho test
}

React Native

Với React Native, bạn có thể dùng thư viện như react-native-launch-arguments để lấy các tham số truyền lúc khởi động.

javascript
import { LaunchArguments } from 'react-native-launch-arguments';

if (LaunchArguments.value().isMaestro === "true") {
    // Áp dụng cấu hình chỉ dành cho test
}

Flutter

Với Flutter, cách đơn giản nhất là dùng package như flutter_launch_arguments để lấy các tham số truyền từ flow mà không phải tự thiết lập platform channel:

dart
import 'package:flutter_launch_arguments/flutter_launch_arguments.dart';

Future<void> getArguments() async {
  final fla = FlutterLaunchArguments();

  final foo = await fla.getString('foo');
  final isFooEnabled = await fla.getBool('isFooEnabled');
  final fooValue = await fla.getDouble('fooValue');
  final fooInt = await fla.getInt('fooInt');
}
  • launchApp: reference kỹ thuật đầy đủ về truyền launch argument.