Chromium Chronicle #21: kompleksowa automatyzacja UI w ChromeOS

Odcinek 21: Brendan Hansknecht, Mountain View, Kalifornia (maj 2021 r.)
Poprzednie odcinki

Dawniej automatyzowaliśmy interfejs ChromeOS w ramach kompleksowych testów (E2E) w całym na flocie urządzeń jest skomplikowana. W Tast wprowadziliśmy utworzona przy użyciu drzewa a11y (ułatwień dostępu) Chrome do sterowania interfejsem użytkownika ChromeOS. W umożliwia programistom łatwe tworzenie testów E2E na podstawie Interfejs (interfejs komputerowy ChromeOS, aplikacje natywne, aplikacje internetowe, interfejs przeglądarki Chrome).

W bibliotece można w prosty i łańcuchowy sposób opisać sposób wyszukiwania elementu interfejsu. Na przykład folder Pobrane w aplikacji Pliki może być zdefiniowany jako:

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

Po zdefiniowaniu wyszukiwarki węzłów możesz korzystać z funkcji na wiele sposobów. Od prostych kliknięć po czekanie na skupienie – interfejs daje stabilny dostęp do wielu operacji. Na przykład do prawej kliknij folder Pobrane, a potem lewym przyciskiem myszy kliknij przycisk kopiowania i wpisz:

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

Otoki znajdują się wokół wspólnych obszarów interfejsu (ustawienia, program uruchamiający, aplikacja Pliki itp.).

Używana powyżej funkcja uiauto.Run wykonuje listę działań. W tym kontekst, działanie to tylko func(context.Context) error. Dzięki takiemu API, z działaniami interfejsu użytkownika można mieszać inne rodzaje działań. Na przykład używanie klawiatury jest tak proste, jak:

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

Szczegółowy przewodnik znajdziesz w Tast Codelab: Chrome UI Automation (w języku angielskim).

Przy tworzeniu tych testów bardzo przydatny jest zrzut drzewa usprawnienia Chrome do debugowania. Aby to zrobić, wystarczy dodać ten kod:

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

Drzewo a11y będzie teraz przechowywane razem z innymi logami Tast jako faillog/ui_tree.txt

Jeśli masz jakieś pytania, skontaktuj się z grupą użytkowników.