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, ChromeOS kullanıcı arayüzünün uçtan uca (E2E) testlerinde otomatikleştirilmesi zorlandı. Tast'ta yeni bir kullanıcı arayüzü kitaplığı ChromeOS kullanıcı arayüzünü kontrol etmek için Chrome a11y (erişilebilirlik) ağacını kullanan bir web tarayıcısıdır. Bu kitaplığı, geliştiricilerin görünür durumdaki tüm sayfalara karşı E2E testleri Kullanıcı arayüzü yüzeyi (ChromeOS masaüstü kullanıcı arayüzü, yerel uygulamalar, web uygulamaları, Chrome Tarayıcı kullanıcı arayüzü).

Kitaplıkta, kullanıcı arayüzü öğesinin nasıl bulunacağını basit ve zincirlenebilir bir şekilde açıklayabilirsiniz. Ö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)

Bir düğüm bulucu tanımladıktan sonra, düğüm bulucuyla etkileşimde çeşitli şekillerde ekleyebilirsiniz. Kullanıcı arayüzü, basit tıklamalardan odaklanma beklemeye kadar kitaplığı, birçok işlem için kararlı erişim sağlar. Örneğin, sağa ya da İndirilenler klasörünü tıklayıp kopyala düğmesini sol tıklayın. Örneğin:

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 mevcut sarmalayıcılar (ayarlar, başlatıcı, dosya uygulaması vb.) kullanın.

Yukarıda kullanılan uiauto.Run işlevi bir işlem listesi alır. Burada bir işlem yalnızca func(context.Context) error. Böyle bir olanakla diğer işlem türleri, kullanıcı arayüzü işlemleriyle bir arada bulunabilir. Örneğin, klavyeyi kullanmak şu kadar 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 UI Otomasyonu konusuna bakın.

Bu testleri yazarken Chrome a11y ağacının dökümünü almak çok yararlıdır inceleyin. 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 tast günlükleriyle birlikte faillog/ui_tree.txt olarak depolanacaktır.

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