Chromium Chronicle #21:ChromeOS 端到端界面自动化

第 21 集:作者:Brendan Hansknecht,地点:加州山景城(2021 年 5 月)
上一集

过去,在整个测试周期内,在端到端 (E2E) 测试中自动执行 ChromeOS 界面 所有设备都是困难的。在 Tast 中, 创建,使用 Chrome a11y(无障碍)树控制 ChromeOS 界面。 库让开发者可以针对任何可见的 界面界面(ChromeOS 桌面界面、原生应用、Web 应用、Chrome 浏览器界面)。

该库通过一种简单的可链接方式来描述如何查找界面元素。 例如,“文件”应用中的 Downloads 文件夹可以定义为:

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

定义节点查找器后,就可以 节点。从简单的点击到等待焦点, 库支持许多操作。例如,从右侧 点击 Downloads 文件夹,然后左键点击“Copy”按钮,就可以写出:

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 群组联系。