Quản lý dữ liệu và trạng thái
Chia sẻ dữ liệu giữa các script bằng đối tượng output toàn cục, namespace và copiedText.
Chia sẻ dữ liệu giữa các phần tử UI và script JavaScript là điều cần thiết để tạo test động và bền vững. Hướng dẫn này nói về cách dùng đối tượng global output, quản lý namespace và lấy văn bản trên UI để dùng trong logic.
Đối tượng output
Astra Scout cung cấp một đối tượng JavaScript global duy nhất tên là output, tồn tại trong suốt quá trình thực thi flow. Bất kỳ dữ liệu nào gán vào đối tượng này trong một script hoặc biểu thức đều có thể dùng ngay ở mọi script và lệnh phía sau.
Bạn có thể lưu chuỗi, số, boolean hoặc đối tượng phức tạp trong output. Bạn có thể truy cập hoặc thêm thông tin vào output bằng cú pháp JavaScript chuẩn. Trong ví dụ sau, giá trị 'Hello World' được gán cho result (một tên key tùy ý):
// myScript.js
output.result = 'Hello World'Sau khi flow chạy myScript.js, giá trị được gán vào đối tượng global. Sau đó bạn có thể dùng giá trị này trong các lệnh tiếp theo, như inputText:
- runScript: myScript.js
- inputText: ${output.result}Namespace cho output
Vì đối tượng output là global, các script khác nhau có thể vô tình ghi đè dữ liệu của nhau nếu dùng cùng tên biến. Để tránh điều này, hãy dùng namespace (đối tượng con đặt tên theo script hoặc tính năng cụ thể).
Ví dụ, thay vì gán biến trực tiếp vào gốc của output, hãy nhóm chúng theo ngữ cảnh:
output.auth = {
token: "abc-123",
expiry: 3600
};output.profile = {
username: "MaestroUser",
role: "Admin"
};Sau đó bạn truy cập dữ liệu này bằng cú pháp có namespace:
- inputText: ${output.auth.token}
- assertVisible: ${output.profile.username}Hàm dùng chung
Đối tượng output có thể lưu cả hàm lẫn dữ liệu. Đây là mẫu mạnh để định nghĩa logic tái sử dụng, như helper API hay hàm định dạng chuỗi phức tạp, ngay từ đầu flow để mọi script phía sau đều gọi được.
Trong ví dụ này, ta định nghĩa hàm tạo token trong apiUtils.js và cho nó dùng global qua namespace output.utils:
// apiUtils.js
function generateToken(prefix) {
return prefix + "_" + Math.random().toString(36);
}
output.utils = {
generateToken: generateToken
};Bằng cách nạp script trong onFlowStart, hàm generateToken trở thành tiện ích tái sử dụng cho phần còn lại của run:
onFlowStart:
- runScript: apiUtils.js
---
# Gọi hàm dùng chung để tạo session token mới
- evalScript: ${output.sessionToken = output.utils.generateToken('session')}Đối tượng maestro
Đối tượng maestro là tiện ích có sẵn cung cấp thông tin về môi trường test hiện tại và dữ liệu UI đã lấy.
| Property | Mô tả |
|---|---|
maestro.copiedText | Chứa văn bản lấy được bởi lệnh copyTextFrom gần nhất. |
maestro.platform | Nền tảng viết thường: ios hoặc android. Hữu ích cho logic điều kiện đa nền tảng. |
Lấy văn bản từ UI
Để chuyển văn bản từ app vào logic JavaScript:
- Dùng lệnh
copyTextFromđể lưu nội dung vào biếnmaestro.copiedText. - Truy cập nội dung đó trong code JavaScript hoặc lệnh bằng
maestro.copiedText.
Ví dụ sau sao chép nội dung từ phần tử userName và dùng nó để gửi một thông điệp động:
- copyTextFrom:
id: userName # Nhắm vào phần tử userName
- inputText: ${'Hello ' + maestro.copiedText} # Chào người dùng bằng tên đã lấyStep tiếp theo
Giờ bạn đã biết cách quản lý dữ liệu khi dùng JavaScript trong flow, hãy xem các hướng dẫn sau:
- Tạo dữ liệu giả lập: dùng
fakerđể tạo dữ liệu test động. - Gửi HTTP request: dùng HTTP client có sẵn để tương tác với API.
