Chromium Chronicle #21: Tự động hoá giao diện người dùng toàn diện của ChromeOS

Tập 21: Tác giả: Brendan Hansknecht tại Mountain View, CA (Tháng 5 năm 2021)
Các tập trước

Trước đây, việc tự động hoá giao diện người dùng ChromeOS trong các chương trình kiểm thử toàn diện (E2E) trên toàn bộ nhóm thiết bị là không hề dễ dàng. Tại Tast, một thư viện giao diện người dùng mới đã được tạo, sử dụng cây Chrome a11y (hỗ trợ tiếp cận) để điều khiển giao diện người dùng ChromeOS. Thư viện này cho phép các nhà phát triển dễ dàng tạo bài kiểm thử E2E trên mọi giao diện người dùng hiển thị trên giao diện người dùng trên ChromeOS (giao diện người dùng trên máy tính ChromeOS, ứng dụng gốc, ứng dụng web, giao diện người dùng của Trình duyệt Chrome).

Thư viện này có một cách đơn giản và có thể tạo chuỗi để mô tả cách tìm một thành phần trên giao diện người dùng. Ví dụ: bạn có thể xác định thư mục Downloads (Tệp đã tải xuống) trong ứng dụng Files là:

filesWindow := nodewith.NameStartingWith("Files")
  .ClassName("RootView").Role(role.Window)
downloadsButton := nodewith.Name("Downloads")
  .Role(role.TreeItem).Ancestor(filesWindow)

Sau khi xác định trình tìm kiếm nút, bạn có thể tương tác với nút đó theo nhiều cách. Từ thao tác nhấp đơn giản cho đến chờ lấy tiêu điểm, thư viện giao diện người dùng cấp quyền truy cập ổn định vào nhiều thao tác. Ví dụ: để nhấp chuột phải vào thư mục Downloads (Tải xuống) và nhấp chuột trái vào nút sao chép, bạn có thể viết:

ui := uiauto.New(tconn)
if err := uiauto.Combine("copy downloads",
  ui.RightClick(downloadsButton),
  ui.LeftClick(nodewith.Name("Copy").Role(role.MenuItem)),
)(ctx); err != nil { /* do error handling */ }

Hiện có các trình bao bọc xung quanh các khu vực giao diện người dùng phổ biến (chế độ cài đặt, trình chạy, ứng dụng tệp, v.v.).

Hàm uiauto.Run được dùng ở trên sẽ lấy một danh sách các thao tác. Trong ngữ cảnh này, một hành động chỉ là một func(context.Context) error. Với một API đơn giản như vậy, bạn có thể kết hợp các loại thao tác khác với thao tác trên giao diện người dùng. Ví dụ: việc sử dụng bàn phím dễ dàng như:

if err := uiauto.Combine("do some random stuff",
  ui.FocusAndWait( /* some text field */ ),
  kb.TypeAction("Hello, world!"),
  kb.AccelAction("Enter"),
  func(ctx context.Context) error {
    // My custom action!
  },
)(ctx); err != nil { /* do error handling */ }

Để xem hướng dẫn chuyên sâu hơn, hãy xem Lớp học lập trình Tast: Tự động hoá giao diện người dùng Chrome

Khi viết các chương trình kiểm thử này, bạn nên kết xuất cây Chrome a11y để gỡ lỗi. Chỉ cần thêm mã sau để thực hiện việc này:

defer faillog.DumpUITreeOnError(ctx, s.OutDir(), s.HasError, tconn)
s.Fatal("I would like to see the ui tree here")

Cây a11y hiện sẽ được lưu trữ với các nhật ký tast khác là faillog/ui_tree.txt

Nếu bạn có thắc mắc, hãy liên hệ với nhóm người dùng tiềm năng.