The Chromium Chronicle n. 21: automazione end-to-end dell'interfaccia utente di ChromeOS

Episodio 21: di Brendan Hansknecht a Mountain View, CA (maggio 2021)
Puntate precedenti

Storicamente, automatizzando l'interfaccia utente di ChromeOS nei test end-to-end (E2E) nell'intero il parco dispositivi è stato difficile. In Tast è stata creata una nuova libreria che utilizza la struttura ad albero dell'accessibilità (accessibilità) di Chrome per controllare l'UI di ChromeOS. Questo consente agli sviluppatori di creare facilmente test E2E su qualsiasi Superficie UI (UI per desktop ChromeOS, app native, app web, UI del browser Chrome).

La libreria ha un modo semplice e concatenabile per descrivere come trovare un elemento UI. Ad esempio, la cartella Download dell'app File potrebbe essere definita come:

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

Una volta definito un nodo di ricerca, è possibile interagire con nodo in molti modi. Dai semplici clic all'attesa, la UI consente di accedere in modo stabile a molte operazioni. Ad esempio, a destra fai clic sulla cartella Download e fai clic con il pulsante sinistro del mouse sul pulsante Copia, potresti scrivere:

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

Sono presenti wrapper nelle aree comuni della UI (impostazioni, Avvio app, app File e così via).

La funzione uiauto.Run utilizzata in precedenza esegue un elenco di azioni. In questo contesto, un'azione è solo un func(context.Context) error. Con un un'API semplice, altri tipi di azioni possono essere combinati con le azioni dell'interfaccia utente. Ad esempio, l'utilizzo della tastiera è semplice 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 */ }

Per una guida più approfondita, consulta Tast Codelab: automazione dell'interfaccia utente di Chrome

Durante la stesura di questi test, è molto utile eseguire il dump della struttura dell'accessibilità di Chrome per il debug. Per farlo, ti basta aggiungere il seguente codice:

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

La struttura ad albero a11y verrà ora archiviata con altri log di attestazione come faillog/ui_tree.txt

In caso di domande, contatta il gruppo Tast-users.