Chromium Chronicle #21: Otomatisasi UI Menyeluruh ChromeOS

Episode 21: oleh Brendan Hansknecht di Mountain View, CA (Mei, 2021)
Episode sebelumnya

Sebelumnya, otomatisasi UI ChromeOS dalam pengujian menyeluruh (E2E) di seluruh perangkat menjadi sulit. Di Tast, library UI baru telah dibuat yang menggunakan hierarki a11y (aksesibilitas) Chrome untuk mengontrol UI ChromeOS. Library ini memungkinkan developer membuat pengujian E2E dengan mudah terhadap platform UI yang terlihat (UI desktop ChromeOS, aplikasi native, aplikasi web, UI Browser Chrome).

Library ini memiliki cara sederhana dan dapat dibuat berantai untuk menjelaskan cara menemukan elemen UI. Misalnya, folder Downloads di Aplikasi File dapat ditentukan sebagai:

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

Setelah menentukan pencari node, Anda dapat berinteraksi dengan node dalam berbagai cara. Mulai dari klik sederhana hingga menunggu fokus, library UI memberikan akses yang stabil ke banyak operasi. Misalnya, untuk mengklik kanan folder Downloads dan mengklik kiri tombol salin, Anda dapat menulis:

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 */ }

Terdapat wrapper di sekitar area UI umum (setelan, peluncur, aplikasi file, dll).

Fungsi uiauto.Run yang digunakan di atas mengambil daftar tindakan. Dalam konteks ini, tindakan hanyalah func(context.Context) error. Dengan API yang sederhana seperti ini, jenis tindakan lain dapat dicampur dengan tindakan UI. Misalnya, menggunakan keyboard semudah:

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 */ }

Untuk panduan yang lebih mendalam, lihat Codelab Tast: Otomatisasi UI Chrome

Saat menulis pengujian ini, sebaiknya Anda membuang hierarki a11y Chrome untuk proses debug. Cukup tambahkan kode berikut untuk melakukannya:

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

Pohon a11y kini akan disimpan dengan log tast lainnya sebagai faillog/ui_tree.txt

Jika ada pertanyaan, hubungi grup pengguna selera.