Chromium Chronicle #21: Otomatisasi UI Menyeluruh ChromeOS

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

Secara historis, mengotomatiskan UI ChromeOS dalam pengujian end-to-end (E2E) di seluruh perangkat menjadi sulit. Di Tast, pustaka UI baru telah yang menggunakan hierarki (aksesibilitas) Chrome untuk mengontrol UI ChromeOS. Ini library memungkinkan developer membuat pengujian E2E dengan mudah terhadap Platform UI (UI desktop ChromeOS, aplikasi native, aplikasi web, UI Browser Chrome).

Library ini memiliki cara yang sederhana dan dapat dirantai untuk menjelaskan cara menemukan elemen UI. Misalnya, folder Downloads di File App dapat ditetapkan 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 {i>node<i} dengan banyak cara. Mulai dari klik sederhana hingga menunggu fokus, UI library memberikan akses yang stabil ke banyak operasi. Misalnya, ke kanan klik folder Downloads dan klik 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 */ }

Sudah ada wrapper seputar area UI umum (setelan, peluncur, aplikasi file, dll).

Fungsi uiauto.Run yang digunakan di atas mengambil daftar tindakan. Di sini konteks, tindakan hanyalah func(context.Context) error. Dengan sederhana, jenis tindakan lain dapat digabungkan dengan tindakan UI. Misalnya, menggunakan {i>keyboard<i} 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, akan sangat berguna untuk membuang pohon 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 sekarang akan disimpan dengan catatan log lainnya sebagai faillog/ui_tree.txt

Jika ada pertanyaan, hubungi grup pengguna Tast.