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.

Hướng dẫn này giải thích cách thực thi JavaScript trong flow và cách 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}`);

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, hãy 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 hoặc template literal vẫn 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ả, hãy 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 cho thấy hai cách tạo một thông điệp:

javascript
console.log('Value: ' + myVar)   // nối chuỗi
console.log(`Value is ${myVar}`) // template literal

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 ${...}.

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

Hãy 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 như trong môi trường phát triển thông thường. Ở đây template literal được hỗ trợ đầ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, hãy xem các hướng dẫn sau: