Chromium Chronicle #21: automação completa da IU do ChromeOS

Episódio 21:por Brendan Hansknecht em Mountain View, CA (maio de 2021)
Episódios anteriores

Historicamente, automatizar a IU do ChromeOS em testes de ponta a ponta (E2E) em toda a frota de dispositivos tem sido difícil. No Tast, foi criada uma nova biblioteca de IU que usa a árvore de acessibilidade (acessibilidade) do Chrome para controlar a IU do ChromeOS. Essa biblioteca permite que os desenvolvedores criem testes E2E facilmente em qualquer superfície de IU visível (IU para computador ChromeOS, apps nativos, apps da Web, IU do navegador Chrome).

A biblioteca tem uma maneira simples e encadeada de descrever como encontrar um elemento de IU. Por exemplo, a pasta Downloads no app Arquivos pode ser definida como:

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

Depois de definir um localizador de nós, é possível interagir com o nó de várias maneiras. De cliques simples a espera pelo foco, a biblioteca de IU oferece acesso estável a muitas operações. Por exemplo, para clicar com o botão direito na pasta Downloads e com o botão esquerdo no botão "Copiar", você pode escrever:

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

Já existem wrappers em torno de áreas comuns da IU (configurações, tela de início, app de arquivos etc.).

A função uiauto.Run usada acima realiza uma lista de ações. Nesse contexto, uma ação é apenas um func(context.Context) error. Com uma API tão simples, outros tipos de ações podem ser misturados com ações da IU. Por exemplo, usar o teclado é tão fácil quanto:

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

Para conferir um guia mais detalhado, consulte Tast Codelab: automação da IU do Chrome

Ao programar esses testes, é muito útil despejar a árvore de acessibilidade do Chrome para depuração. Basta adicionar o seguinte código para fazer isso:

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

A árvore de acessibilidade agora será armazenada com outros registros tast como faillog/ui_tree.txt.

Se você tiver alguma dúvida, entre em contato com o grupo tast-users.