Chromium Chronicle #21:ChromeOS 端對端使用者介面自動化

第 21 集:Brendan Hansknecht 在美國加州山景城 (Mountain View) 的 Brendan Hansknecht (2021 年 5 月)
上一集

以往,在整個測試期間,將 ChromeOS UI 自動化處理整個端對端 (E2E) 測試 一直以來都非常困難在 Tast 中,新的 UI 程式庫 ,利用 Chrome 無障礙功能 (無障礙功能) 樹狀結構控制 ChromeOS 使用者介面。本 程式庫可讓開發人員輕鬆針對所有可見項目建立 E2E 測試 UI 介面 (ChromeOS 電腦版 UI、原生應用程式、網頁應用程式、Chrome 瀏覽器 UI)。

程式庫使用可鏈結的簡單方式,說明如何尋找 UI 元素。 舉例來說,「檔案」應用程式中的「下載」資料夾可以定義如下:

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

定義節點尋找工具後,就可以與 以多種方式建構節點從簡單的點擊到等待焦點,使用者介面 程式庫可穩定存取多項作業。例如,從右側 按一下「Downloads」資料夾,並按住「複製」按鈕,這樣您就能寫入以下內容:

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

我們已針對通用 UI 區域 (設定、 啟動器、檔案應用程式等)。

上述使用的 uiauto.Run 函式會執行動作清單。在本 動作只是 func(context.Context) error。為此, 簡單 API,其他類型的動作可與 UI 動作搭配使用。 舉例來說,使用鍵盤非常簡單:

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 UI Automation

編寫這類測試時,傾印至 Chrome 11y 樹 以便偵錯方法很簡單,只要加入下列程式碼即可:

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

A11y 樹狀結構現在會與其他 Tast 記錄檔儲存為 faillog/ui_tree.txt

如有任何問題,請與 tast-users 群組聯絡。