SuperAPI AI 工具集

winui-ui-testing

测试与质量

查看项目

更新于 10-15 18:13

技能介绍

用途

winui-ui-testing 用于为 Windows 桌面应用编写和运行自动化 UI 测试。它通过 WinApp CLI 0.7+ 提供的 winapp ui UI Automation(UIA)测试框架,生成一个批量测试脚本,一次性运行所有测试,而不是进行一长串交互式调用。

由于底层使用 Windows UI Automation,基于 AutomationId 的工作流适用于任何 Windows 桌面框架,无论应用是打包还是未打包。对于非 WinUI 框架,可跳过 WinUI 特有的绑定/对话框建议。

主要能力

核心动词包括:list-windows、inspect、search、get-property、get-value、wait-for;invoke、click、set-value、focus、scroll-into-view;send-keys、hover、drag、touch、pen;screenshot、record。每个动词的具体选择器和选项应通过其 --help 查看,而不是凭简短参考猜测。

测试脚本支持断言:使用 wait-for --value 验证 TextBox/NumberBox 值、RichEditBox 文本、ComboBox 选择、开关/复选框的 On/Off 以及 TextBlock/标签文本;--contains 匹配子串;--gone 等待元素消失;-p IsEnabled --value True 仅用于特定属性。

脚本会生成结构化结果(test-results.json)和截图证据,并支持在 Windows Sandbox 中运行以将合成输入与用户桌面隔离。

使用方式

  1. 选择目标:优先使用 Windows Sandbox(若可用);否则告知用户并选择本地。如果用户明确要求 Windows Sandbox 但不可用,应停止并指向 winui-setup 中的启用步骤。停止的来宾不能证明不可用,target snapshot 可能报告没有运行目标而功能实际已启用。

  2. 编写宿主机侧批量脚本:创建 ui-tests.ps1,替换示例 AutomationId/期望值为应用的实际需求。脚本使用 winapp run . --on sandbox --detach --json 启动来宾应用,或省略 --on sandbox 进行本地执行。运行 JSON 包含 ProcessId、ProcessScope 和 UiTargetArgs(PascalCase)。在 Windows Sandbox 中,UiTargetArgs 为 --on sandbox -a <guestPID>,两部分都要保留。

  3. 运行、读取并视觉验证:运行脚本后读取 test-results.json,并用图像查看工具查看每个宿主机 PNG。UIA 通过无法检测裁剪、重叠、错误主题或内容溢出容器。对于意外的滚动条、省略号、被裁剪的控件、重叠行、不平衡的空白、错误的光/暗/高对比度主题或缺失的焦点/悬停/错误状态,应判定视觉审查失败。

适用场景

  • 为 Windows 桌面应用(任意框架,打包或未打包)编写自动化 UI 测试。
  • 验证按钮、导航项、文本框、下拉框、开关、复选框等控件的交互和状态。
  • 测试文件选择器、浮出控件、ContentDialog、上下文菜单、键盘快捷键、悬停、拖拽、触摸和笔输入。
  • 在 Windows Sandbox 中隔离运行合成输入测试。
  • 进行可访问性审计,检查应用控件是否具有 AutomationId。

限制

  • 真实输入和捕获需要解锁的宿主机以及已连接、未最小化的 Sandbox 客户端。树检查可能可用而输入不可用;可读的树不是输入就绪检查。
  • 持久来宾是共享的,不是相互不信任工作流之间的隔离。没有支持的 --unique-identity 选项。相互不信任的工作应使用独立机器。
  • 来宾 --debug-output 仅支持打包应用。
  • 项目构建/发布在宿主机执行;部署、应用启动和 ui --on sandbox 在来宾执行。批量脚本应在宿主机运行,而不是在 target exec 内(会双重路由)。
  • 不要在没有任务许可的情况下启用 Windows 功能或启动应用。
  • 系统快捷键需要 CLI 的显式权限标志;不要将其用作桌面就绪错误的变通方法。
  • 修复并重跑最多两轮;之后报告剩余失败。没有结构化结果和视觉审查,不得宣布完成。
  • 前置条件和启用方式参见 winui-setup。