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

Tập 21: của Brendan Hansknecht ở 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 quy trình kiểm thử toàn diện (E2E) trên toàn bộ gặp nhiều khó khăn trong việc cung cấp các thiết bị. Trong Tast, một thư viện giao diện người dùng mới đã được được tạo bằng cây a11y (hỗ trợ tiếp cận) của Chrome để điều khiển giao diện người dùng ChromeOS. Chiến dịch này cho phép các nhà phát triển dễ dàng tạo các chương trình kiểm thử E2E dựa trên mọi Nền tảng giao diện người dùng (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, theo 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ụ: thư mục Downloads (Tệp đã tải xuống) trong ứng dụng Files có thể được xác định là:

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

Khi đã xác định một trình tìm nút, bạn có thể tương tác với nút theo nhiều cách. Từ những lượt nhấp đơn giản đến thao tác chờ lấy tiêu điểm, giao diện người dùng thư viện cấp quyền truy cập ổn định vào nhiều thao tác. Ví dụ: sang phải nhấp vào thư mục Downloads (Tải xuống) rồi 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ó trình bao bọc xung quanh các khu vực giao diện người dùng chung (chế độ cài đặt, trình chạy, ứng dụng tệp, v.v.).

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

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 về trải nghiệm: Tự động hoá giao diện người dùng trên Chrome

Khi viết các bài kiểm thử này, sẽ rất hữu ích nếu bạn kết xuất cây a11y của Chrome để gỡ lỗi. Để thực hiện việc này, bạn chỉ cần thêm mã sau:

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

Giờ đây, cây a11y sẽ được lưu trữ cùng với các nhật ký tast khác dưới dạng faillog/ui_tree.txt

Nếu bạn có thắc mắc, hãy liên hệ với nhóm thử nghiệm.