第 21 集:作者:Brendan Hansknecht,地点:加利福尼亚州山景城(2021 年 5 月)
上一集
过去,在整个设备群中自动执行 ChromeOS 界面的端到端 (E2E) 测试并非易事。在 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 文件夹,然后左键点击复制按钮,您可以编写以下代码:
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 网上论坛。