Odcinek 21: Brendan Hansknecht w Mountain View, Kalifornia (maj 2021 r.)
Poprzednie odcinki
W przeszłości automatyzacja interfejsu ChromeOS pod kątem kompleksowych testów (E2E) w całej flocie urządzeń była trudna. W Tast utworzyliśmy nową bibliotekę interfejsu, która do sterowania interfejsem ChromeOS wykorzystuje drzewo ułatwień dostępu (A11y) w Chrome. Ta biblioteka umożliwia deweloperom łatwe tworzenie testów E2E względem dowolnej widocznej platformy interfejsu (interfejsu użytkownika na komputery ChromeOS, aplikacji natywnych, aplikacji internetowych i interfejsu przeglądarki Chrome).
W bibliotece dostępny jest prosty, łańcuchowy sposób opisania sposobu znajdowania elementu interfejsu. Na przykład folder Pobrane w aplikacji Pliki można zdefiniować 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żna korzystać z węzła na wiele sposobów. Biblioteka UI zapewnia stabilny dostęp do wielu operacji – od prostych kliknięć po czekanie na Ciebie. Na przykład, aby kliknąć prawym przyciskiem myszy folder Pobrane, a potem kliknąć lewym przyciskiem myszy przycisk kopiowania, możesz napisać:
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 */ }
Istnieją już opakowania związane z częstymi obszarami interfejsu (ustawienia, program uruchamiający, aplikacja do obsługi plików itp.).
Użyta powyżej funkcja uiauto.Run
wykonuje listę działań. W tym kontekście działaniem jest tylko func(context.Context) error
. Przy tak prostym interfejsie API można łączyć inne działania z działaniami interfejsu.
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 */ }
Bardziej szczegółowy przewodnik znajdziesz w części Tast Codelab: Chrome UI Automation.
Przy pisaniu tych testów przydaje się zrzut drzewa Chrome na potrzeby debugowania. W tym celu 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 zapisami danych jako faillog/ui_tree.txt
Jeśli masz pytania, skontaktuj się z grupą tast-users.