Chromium Chronicle #21: ChromeOS Uçtan Uca Kullanıcı Arayüzü Otomasyonu

21. Bölüm: Brendan Hansknecht, Mountain View, Kaliforniya'da (Mayıs 2021)
Önceki bölümler

Geçmişte, cihaz filosu genelinde uçtan uca (E2E) testlerde ChromeOS kullanıcı arayüzünü otomatikleştirmek zordu. Tast'ta, ChromeOS kullanıcı arayüzünü kontrol etmek için Chrome a11y (erişilebilirlik) ağacını kullanan yeni bir kullanıcı arayüzü kitaplığı oluşturulmuştur. Bu kitaplık, geliştiricilerin görünür herhangi bir kullanıcı arayüzü yüzeyinde (ChromeOS masaüstü kullanıcı arayüzü, yerel uygulamalar, web uygulamaları, Chrome Tarayıcı kullanıcı arayüzü) kolayca E2E testleri oluşturmalarına olanak tanır.

Kitaplık, bir kullanıcı arayüzü öğesinin nasıl bulunacağını açıklamak için basit, zincirlenebilir bir yol içerir. Örneğin, Dosyalar uygulamasındaki İndirilenler klasörü şu şekilde tanımlanabilir:

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

Düğüm bulucu tanımladıktan sonra düğümle farklı şekillerde etkileşime geçebilirsiniz. Kullanıcı arayüzü kitaplığı, basit tıklamalardan odaklanmayı beklemeye kadar birçok işleme kararlı erişim sağlar. Örneğin, İndirilenler klasörünü sağ tıklamak ve kopyala düğmesini sol tıklamak için şunu yazabilirsiniz:

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

Ortak kullanıcı arayüzü alanlarının etrafında sarmalayıcılar (ayarlar, başlatıcı, dosya uygulaması vb.) vardır.

Yukarıda kullanılan uiauto.Run işlevi, bir işlemlerin listesini alır. Bu bağlamda, bir işlem yalnızca bir func(context.Context) error'dir. Bu kadar basit bir API ile diğer işlem türleri, kullanıcı arayüzü işlemleriyle birleştirilebilir. Örneğin, klavyeyi kullanmak şu şekilde kolaydır:

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

Daha ayrıntılı bir kılavuz için Tast Codelab: Chrome Kullanıcı Arayüzü Otomasyonu sayfasına göz atın.

Bu testleri yazarken, hata ayıklama için Chrome a11y ağacının dökümüne bakmak çok yararlıdır. Bunun için aşağıdaki kodu eklemeniz yeterlidir:

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

A11y ağacı artık diğer hedef günlükleriyle birlikte faillog/ui_tree.txt olarak depolanacak.

Sorunuz varsa tast-users group ile iletişime geçin.