如何搭建 UI 自动化框架,AI Coding 解决了哪些问题?
未标记
考查重点:UI 自动化分层与脚本有效性。用页面对象封装交互、fixture 管数据与登录,关键链路先入 CI;AI 可补脚本,但定位器和业务断言需执行核验
本题目录
参考答案
核心回答
UI 自动化框架要把业务用例、页面操作、测试数据、执行环境和失败证据组织起来,使测试既能稳定运行,也能在失败时定位问题。搭建时通常先选少量关键业务链路跑通,再抽取公共操作和数据准备能力,逐步接入 CI 和历史用例维护。
以 Web 项目为参考,可以用 TypeScript 和 Playwright Test 执行用例:页面对象封装定位与交互,fixture 管理浏览器会话及测试数据,断言检查业务结果,报告和 trace 保存失败过程。重点是稳定定位、异步等待、数据隔离及环境一致性,而不只是把点击步骤录下来。
AI Coding 可以帮助理解老工程、生成框架骨架、补页面操作与测试、分析报错和整理重复代码。用例目标、预期结果和关键边界仍需明确,再运行验证生成结果。它是否提效,要看脚本编写与维护时间、首次可用率、误报和实际缺陷发现情况,不能只看生成了多少用例。
框架怎样从一条链路搭起来
下面以“订单列表筛选并查看详情”为参考用例,实际项目可替换成自己的业务。
先定义前置数据、操作和预期:准备属于当前测试账号的订单,按状态筛选,检查列表中的订单符合条件,再进入详情核对订单信息。同时覆盖无结果、加载失败和无权限等必要边界。预期来自需求与固定测试数据,不由页面当前显示什么反向决定。
框架可以按职责组织:
- 用例层:描述业务步骤与结果,尽量能直接看懂测试意图。
- 页面和组件层:封装列表、筛选框、弹窗等定位与交互,页面变化时集中修改。
- fixture 与数据层:准备账号、初始状态和独立数据,执行后清理;必要时通过测试接口准备前置条件,减少反复从 UI 造数据。
- 执行与证据层:管理环境配置、浏览器、超时、并行和报告,把失败步骤与截图、trace、控制台及网络请求对应起来。
先让一条有明确断言的用例在本地和 CI 都稳定运行,再扩展覆盖。抽象围绕实际重复点形成,不需要一开始就包装所有浏览器 API。
搭建中最常见的难点
定位不稳定。 优先使用角色、标签、可见名称或约定的测试标识;多个元素相同时,先缩小到对应列表行或组件。依赖长 CSS 路径、固定位置或动态样式类,页面稍改就容易失效。
异步状态没等对。 Playwright 的动作会检查元素是否可操作,但按钮可点击不代表业务请求和结果渲染已经完成。应等待可观察的业务条件,并使用可重试断言检查目标状态;固定等待几秒既拖慢测试,也未必覆盖慢请求。
用例互相影响。 独立浏览器上下文能隔离 Cookie 和本地存储,但不会自动隔离服务端账号、订单和库存。并行用例需要独立数据或明确的资源分配,不能依赖“上一条先创建、下一条再查询”的隐含顺序。
本地通过、CI 失败。 检查浏览器和系统依赖、视口、时区、字体、网络与测试数据,再根据 trace 判断是定位、等待、接口异常还是产品缺陷。对视觉比较尤其要固定影响渲染的环境。重试可以帮助识别偶发问题,但重试后通过的结果仍应保留,避免掩盖不稳定用例。
AI Coding 具体解决什么,怎样使用
框架初建时,可以让 AI 阅读现有测试、接口和组件代码,生成符合项目结构的配置、fixture、页面对象和一个完整用例。给它现有目录、依赖版本、测试数据入口、定位约定和验收条件,比只说“搭一个自动化框架”更容易得到可用代码。
维护阶段,可以用 AI 批量调整重复的页面操作、补缺失断言、根据 trace 和报错提出可验证的原因。比如筛选用例偶发读取旧列表,先确认请求和渲染时序,再把不可靠的固定等待改为相应状态检查;修复后重跑原场景,而不是让 AI 反复加长超时。
需要特别区分两种方式:AI Coding 是协助产出和修改测试代码;运行时 GUI Agent 则由模型观察界面并决定动作。 后者可以用自然语言完成复杂交互,但会引入模型判断、调用成本和结果波动。像金额、订单归属和权限这样的精确结果,适合用确定性断言和独立数据核对;视觉或语义判断可以作为补充。
自动修复定位器时,也要确认新定位仍指向原业务对象。把失败断言删掉、把预期改成当前结果,虽然能让脚本变绿,却没有解决原问题。
CI、失败定位和历史用例怎样衔接
CI 可以先执行影响范围内的冒烟用例,较完整的回归按项目规模与运行成本安排。执行前确认服务和数据准备就绪,执行后归档版本、环境、用例结果及失败证据。
用例失败后,先按证据区分产品缺陷、环境问题、数据问题和脚本失效。比如点击后出现错误页面,应沿操作时间查看请求、响应和浏览器异常,再关联服务端日志;HTTP 返回 200 并不保证页面和业务数据正确。
历史用例随需求变化更新预期,随页面变化维护定位,随缺陷修复补回归;重复或失去业务价值的用例可以整理。短期无法修复的不稳定用例也应记录原因和跟进,不能只从报告里消失。
项目效果可以结合相同任务的人工编写与 AI 辅助过程比较,记录写出首版、调试到可用、后续维护分别耗时多少,以及是否增加误报或漏检。若改进主要来自数据隔离或等待策略,就把原因讲清楚,不把全部收益归到 AI 生成代码。
常见追问
页面没有稳定测试标识怎么办?
先用用户可见语义和局部范围定位;仍存在歧义时,与开发约定稳定标识。视觉定位可以补充复杂控件,但关键结果的检查标准仍需明确。
为什么不能只用录制工具或让 AI 一次性生成全部用例?
录制和生成能快速得到操作骨架,却通常缺少可靠前置数据、异常分支、清理和业务断言。应把它们作为起点,再完善和运行验证。
是不是所有测试都应该走 UI?
UI 测试主要覆盖关键用户链路与界面集成。大量业务分支适合放在更快、更稳定的单元或接口测试中,避免 UI 回归承担全部验证成本。
参考资料
- 国内:JavaGuide:mattpocock/skills 实践:借鉴 diagnosing-bugs 的可复现反馈、缩小原因与验证修复方法,说明正文中 AI Coding 如何参与测试失败诊断。
- 国内:字节跳动 Web Infra:Midscene Basics:采用自主规划、多步交互、单步动作与界面断言的区分,说明正文中运行时 GUI Agent 和生成测试代码的职责差别。
- 国内:阿里云:使用 Browser Use Sandbox:依据浏览器环境创建、就绪检查、归档销毁及登录态隔离,说明正文中 CI 执行环境与证据管理的设计。
- 国外:Microsoft:Playwright Best Practices:依据用户行为验证、用例隔离、稳定定位与可重试断言,说明正文中 UI 自动化不稳定问题的处理。
- 国外:Microsoft:Playwright Trace Viewer:依据动作、页面快照、控制台与网络记录的时间线,说明正文中失败步骤如何定位。

