Bỏ qua, đến nội dung

Chạy và debug JavaScript ​

Chạy JavaScript trong flow bằng biểu thức inline, evalScript hoặc runScript và debug bằng console.log.

Thực thi JavaScript trong flow và dùng log để debug script.

Các cách thực thi ​

Astra Scout cung cấp ba cách chạy JavaScript, tùy độ phức tạp của logic bạn cần.

1. Biểu thức inline ​

Với logic đơn giản hoặc giá trị động, dùng cú pháp ${} trực tiếp bên trong các lệnh hiện có. Cách này phù hợp để nối chuỗi hoặc tính toán cơ bản.

yaml
- launchApp
- inputText: ${'User_' + Math.floor(Math.random() * 10000)} # Tạo username động
- tapOn: "${maestro.platform === 'ios' ? 'Allow' : 'While using the app'}" # Logic điều kiện

Thông tin

Tìm hiểu cách tạo dữ liệu giả lập bằng JavaScript.

2. Lệnh evalScript ​

Dùng evalScript cho các step chỉ có logic, không tương tác trực tiếp với phần tử UI, như đặt biến hoặc thực hiện phép tính.

yaml
- evalScript: ${output.timestamp = new Date().getTime()} # Lưu dữ liệu để dùng sau
- evalScript: ${console.log('Test execution started')} # Ghi log inline

3. Lệnh runScript ​

Với logic phức tạp, hàm tái sử dụng hoặc script dài, dùng runScript để thực thi file .js bên ngoài.

Bạn có thể truyền biến môi trường vào script bằng property env, giống cách truyền tham số cho subflow. Trước tiên, dùng runScript để chỉ định file JavaScript và các biến chia sẻ với nó:

yaml
- runScript:
    file: setupUser.js
    env:
       userRole: 'admin' # Truyền một tham số vào script

Sau đó file JavaScript có thể đọc trực tiếp biến môi trường để thực hiện các hành động cần thiết:

javascript
// Truy cập tham số được truyền trực tiếp bằng tên của nó
const role = userRole;
console.log('Setting up user with role: ' + role);

Không dùng template literal trong file script

Trước khi chạy một file .js, runner thay mọi ${...} trong file bằng giá trị của biểu thức đó, giống như trong YAML. Vì vậy template literal của JavaScript như `Role: ${role}` bị thay trước khi script chạy và làm script fail. Nối chuỗi trong các file runScript.

Ghi log và debug ​

Bạn có thể dùng console.log, console.warn và console.error để debug script và theo dõi quá trình chạy flow.

Khi ghi log từ JavaScript, lưu ý:

  • Nhiều đối số dùng được: console.log('My variable is', variable) in tất cả đối số. Nối chuỗi là cách viết rõ ràng.
  • Output đi tới output của runner: console.log ghi vào standard output của runner. Astra Scout không ghi file maestro.log riêng cho nó, và văn bản có thể không xuất hiện trong danh sách step của run.

Mẹo

Nếu cần một giá trị hiện trong kết quả, dùng nó trong một step có label hoặc assert trên nó, thay vì chỉ dựa vào log.

Đoạn code sau tạo một thông điệp bằng cách nối chuỗi:

javascript
console.log('Value: ' + myVar)

Ghi log bằng lệnh evalScript ​

Nếu muốn ghi log inline, bạn có thể dùng evalScript để xuất ra console mà không cần tạo file riêng.

yaml
- evalScript: '${console.log("Value: " + myVar)}'

Thông tin: đừng dùng template literal trong evalScript

Template literal chuẩn của JavaScript (dùng dấu backtick ``` và ${}) sẽ không chạy bên trong evalScript vì bản thân lệnh đã được bao trong một khối ${...}. Điều này cũng đúng với các file .js chạy bằng runScript.

yaml
# Ví dụ dùng sai
- evalScript: console.log(`Value is ${myVar}`)

Dùng nối chuỗi thay thế.

Ghi log trong file ngoài ​

Khi dùng runScript, bạn có thể tổ chức log trong file JavaScript với nhiều câu lệnh và biến. Tạo thông điệp bằng cách nối chuỗi, vì template literal không chạy trong các file này.

Flow sau chạy một script sẽ ghi log một thông báo trạng thái:

yaml
- runScript:
    file: script.js
js
// script.js
const status = 'Success';
console.log('Operation status: ' + status); // In ra 'Operation status: Success'

Step tiếp theo ​

Giờ bạn đã biết cách chạy và debug code JavaScript trong flow, xem các hướng dẫn sau: