Эпизод 21: Брендан Ханскнехт, Маунтин-Вью, Калифорния (май 2021 г.)
Предыдущие серии
Исторически автоматизировать пользовательский интерфейс ChromeOS в сквозных (E2E) тестах на всем парке устройств было сложно. В Tast создана новая библиотека пользовательского интерфейса, которая использует дерево Chrome a11y (доступность) для управления пользовательским интерфейсом ChromeOS. Эта библиотека позволяет разработчикам легко создавать E2E-тесты для любой видимой поверхности пользовательского интерфейса (интерфейс ChromeOS для ПК, собственные приложения, веб-приложения, пользовательский интерфейс браузера Chrome).
В библиотеке есть простой, цепочный способ описания того, как найти элемент пользовательского интерфейса. Например, папку «Загрузки» в приложении «Файлы» можно определить так:
filesWindow := nodewith.NameStartingWith("Files")
.ClassName("RootView").Role(role.Window)
downloadsButton := nodewith.Name("Downloads")
.Role(role.TreeItem).Ancestor(filesWindow)
После того как вы определили средство поиска узлов, с ним можно взаимодействовать разными способами. Библиотека пользовательского интерфейса обеспечивает стабильный доступ ко многим операциям — от простых кликов до ожидания фокусировки . Например, чтобы щелкнуть правой кнопкой мыши папку «Загрузки» и нажать левой кнопкой мыши кнопку «Копировать», вы можете написать:
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 */ }
Существуют оболочки для общих областей пользовательского интерфейса (настройки, панель запуска, файловое приложение и т. д.).
Функция uiauto.Run
, использованная выше, выполняет список действий. В этом контексте действие — это просто func(context.Context) error
. С помощью такого простого API другие виды действий можно смешивать с действиями пользовательского интерфейса . Например, использовать клавиатуру так же просто, как:
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 */ }
Более подробное руководство можно найти в разделе Tast Codelab: Автоматизация пользовательского интерфейса Chrome.
При написании этих тестов очень полезно создать дамп дерева Chrome a11y для отладки. Для этого просто добавьте следующий код:
defer faillog.DumpUITreeOnError(ctx, s.OutDir(), s.HasError, tconn)
s.Fatal("I would like to see the ui tree here")
Дерево a11y теперь будет храниться вместе с другими журналами тестирования faillog/ui_tree.txt
Если у вас есть вопросы, обращайтесь в группу tast-users .