视觉驱动 UI 自动化执行
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/drive-web-and-app-uis-with-vision-grounded-steps-when-selectors-are-brittle-or-unavailable 到你的 AI 助手。
技能介绍
自动化测试中的选择器困境
传统 UI 自动化严重依赖 DOM 选择器(如 #submit-btn、.user-profile)定位元素,但在以下场景中这一策略频繁失效:
- 动态内容生成:SPA 应用每次加载生成随机类名(如
_4x7f2a) - 跨框架渲染差异:React/Vue/Svelte 对
data-testid属性支持不一致 - 无障碍属性缺失:移动端 WebView 常省略
aria-label或role属性 - 异步渲染延迟:懒加载组件在操作触发时尚未完成 DOM 挂载
- iframe 隔离:嵌入第三方组件无法通过主文档选择器穿透
当选择器策略崩溃时,整个自动化流程会卡在「元素未找到」阶段,导致测试中断或误报。
视觉驱动的核心工作流
本技能采用视觉基础步骤(vision-grounded steps)替代选择器定位,核心流程如下:
- 环境感知阶段
- 通过 Midscene.js 截取当前界面截图
- 将截图与用户自然语言指令(如「点击右侧导航栏的设置图标」)共同输入视觉模型
- 模型输出元素坐标(x,y)及语义标签(如 "设置": [120,340])
- 动作执行阶段
- 基于坐标直接执行 mouse.click(x,y) 或 tap(x,y)
- 跨平台兼容:Web 端通过 Playwright/Puppeteer,移动端通过 adb/WebDriverAgent
- 自动处理滚动偏移:当目标在视口外时触发 scrollTo(x,y)
- 状态验证阶段
- 视觉断言替代 isVisible() 检查:通过截图对比验证弹窗是否弹出
- 动态内容检测:识别列表项数量变化(如「购物车应有 3 件商品」)
- 文本模糊匹配:容忍大小写差异("OK" vs "Ok")
适用边界与技术限制
适用场景:
- 无障碍属性缺失的遗留系统
- 频繁重构的现代 SPA 应用
- 移动端混合开发框架(Ionic/Flutter WebView)
- 需要跨浏览器/设备一致性的场景
关键限制:
- 模型依赖:视觉模型需具备至少 85% 的坐标定位准确率,否则需混合使用选择器作为后备
- 性能开销:每次操作需 200-500ms 模型推理时间,高频连续操作场景不适用
- 动态内容处理:验证码、实时聊天气泡等高频变化元素需配合 OCR 单独处理
- 多模态交互:语音输入、手势操作等非视觉交互仍需传统自动化方案
工程建议:
- 优先用于功能验证阶段,而非性能测试
- 结合视觉回归测试(如 Percy)形成互补
- 关键路径操作保留选择器后备机制
- 定期用真实用户数据校准模型偏移(如不同分辨率下的坐标映射)
使用场景
- 前端团队重构 React 应用后,原有的 CSS 选择器因类名随机化全部失效,需要重新设计自动化测试的元素定位策略
- 移动端 WebView 中混合开发的应用缺少 aria-label 属性,传统自动化方案无法定位按钮和输入框
- SPA 应用的懒加载组件在自动化脚本运行时尚未渲染完成,导致选择器找不到元素,测试频繁中断
- 同一业务流程需要在 Chrome、Safari、Firefox 三种浏览器上验证,但各浏览器生成的 DOM 结构存在差异
适合人员
- 负责维护大型 SPA 应用自动化测试套件的 QA 工程师,面对频繁的前端重构需要更稳定的元素定位方案
- 开发跨平台移动应用的前端开发者,需要在 WebView 和原生组件混合环境中实现可靠的 UI 自动化
- 搭建企业级 UI 自动化测试框架的自动化架构师,正在评估视觉模型在多浏览器兼容性测试中的应用价值
- 维护遗留系统测试用例的技术负责人,原系统缺少语义化标签,希望通过视觉驱动降低长期维护成本