Aflevering 21: door Brendan Hansknecht in Mountain View, CA (mei 2021)
Vorige afleveringen
Historisch gezien was het lastig om de gebruikersinterface van ChromeOS te automatiseren in end-to-end (E2E)-tests op het hele apparatenpark. In Tast is een nieuwe UI-bibliotheek gemaakt die de Chrome a11y-boom (toegankelijkheid) gebruikt om de ChromeOS-gebruikersinterface te beheren. Met deze bibliotheek kunnen ontwikkelaars eenvoudig E2E-tests maken op elk zichtbaar UI-oppervlak (ChromeOS desktop UI, native apps, webapps, Chrome Browser UI).
De bibliotheek heeft een eenvoudige, aan elkaar gekoppelde manier om te beschrijven hoe u een UI-element kunt vinden. De map Downloads in de app Bestanden kan bijvoorbeeld als volgt worden gedefinieerd:
filesWindow := nodewith.NameStartingWith("Files")
.ClassName("RootView").Role(role.Window)
downloadsButton := nodewith.Name("Downloads")
.Role(role.TreeItem).Ancestor(filesWindow)
Nadat u een knooppuntzoeker hebt gedefinieerd, kunt u op vele manieren met het knooppunt communiceren. Van eenvoudige klikken tot wachten op focus: de UI-bibliotheek biedt stabiele toegang tot veel bewerkingen . Als u bijvoorbeeld met de rechtermuisknop op de map Downloads klikt en met de linkermuisknop op de knop Kopiëren klikt, kunt u het volgende schrijven:
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 */ }
Er zijn bestaande wrappers rond algemene UI-gebieden (instellingen, opstartprogramma, bestanden-app, enz.).
De hierboven gebruikte uiauto.Run
functie gebruikt een lijst met acties. In deze context is een actie slechts een func(context.Context) error
. Met zo'n eenvoudige API kunnen andere soorten acties worden gecombineerd met UI-acties . Het toetsenbord gebruiken is bijvoorbeeld net zo eenvoudig als:
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 */ }
Zie Tast Codelab: Chrome UI Automation voor een uitgebreidere handleiding
Bij het schrijven van deze tests is het erg handig om de Chrome a11y-boom te dumpen voor foutopsporing. Voeg hiervoor eenvoudig de volgende code toe:
defer faillog.DumpUITreeOnError(ctx, s.OutDir(), s.HasError, tconn)
s.Fatal("I would like to see the ui tree here")
De a11y-boom wordt nu samen met andere tastlogboeken opgeslagen als faillog/ui_tree.txt
Als u vragen heeft, neem dan contact op met de smaakgebruikersgroep .