AntiGem 浏览器 QA 是做什么的?
概述
统一的、令牌高效的浏览器测试技能,用于 AntiGem 的原生 browser_mcp(17 个工具)。通过渐进式披露涵盖 8 个测试方面:探索性流程、表单/安全、布局/无障碍/视觉、PWA/离线/i18n 以及页面内审计片段。强制性协议:标签页复用 → 锁定 → ref 优先发现 → React 安全输入 → 批处理操作 → 运行时门控(控制台 + 网络)。
使用场景
- 在 Web/PWA 应用上编写或执行 E2E 测试
- 探索性缺陷查找(首次用户流程、对抗性序列)
- 表单边界模糊测试、XSS 载荷、文件上传、拖拽、Canvas/WebGL
- WCAG 2.1 AA/AAA 审计、200% 缩放重排、CLS、触摸目标(≥48px/≥60dp)
- 视觉回归基线对比构建差异、响应式断点
- Service Worker 生命周期、IndexedDB/Dexie 离线同步、印度语系字形/辅音簇裁剪
- 运行时控制台错误/网络故障零容忍门控
强制性执行协议
- 标签页复用:
browser_list_tabs → 复用现有标签页或 browser_open_url
- 触摸/缩放锁定: 在多步骤链之前执行
browser_lock(locked=true)
- Ref 优先发现: 首选
browser_find(query="...") 或使用 browser_read_page(filter="interactive") 获取具有稳定 ref_N ID 的 ARIA 树
- React 安全输入: 对于
<input>、<textarea>、<select>、复选框/开关、单选按钮、contenteditable,使用 browser_form_input(ref, value)
- 可信操作:
browser_computer (left_click, hover, left_click_drag, key, scroll_to, screenshot, zoom [x0,y0,x1,y1], wait);文件输入使用 browser_upload_file;弹窗使用 browser_handle_dialog
- 往返批处理: 对于确定性的多步骤链,使用
browser_batch
- 运行时门控(零容忍): 在每个屏幕之后执行
browser_get_console_logs(pattern="error|warn") + browser_read_network(如果标签页在 MCP 附加之前已存在,则先重新加载)
- 解锁: 退出时执行
browser_lock(locked=false)
8 方面统一检查清单
| # | 方面 | 通过/失败门控 |
|---|
| 1 | 探索性 & 流程 | 首次用户模拟;多路由导航;browser.goBack() 模态框优先级;焦点陷阱;缺陷报告格式 |
| 2 | 表单 & 组件 | 边界模糊测试;数字裁剪;内联失焦验证;滚动到第一个错误;防重复提交;XSS 清理;文件上传;拖拽;Canvas/SVG 验证 |
| 3 | 安全测试 | CSP 头部;XSS 载荷注入;权限拒绝回退;安全 Cookie 标志 |
| 4 | 布局、无障碍、视觉 | WCAG AA ≥4.5:1 / 日光 AAA ≥7.0:1 / 红绿色盲 #000000;200% 缩放重排;CLS ≤0.1;prefers-reduced-motion;触摸目标 ≥48px(标准)/ ≥64px(农村);视觉差异基线对比构建 |
| 5 | PWA、离线、i18n | Manifest 和 SW 生命周期;IndexedDB/Dexie ACID + useLiveQuery;离线模拟 + 同步队列;印度语系合字/辅音簇裁剪;document.documentElement.lang;Lakhs/Crores + tabular-nums |
| 6 | Web API 和权限 | navigator.vibrate?.(),摄像头/地理位置权限拒绝;硬件 API 回退 |
| 7 | 运行时诊断 | 控制台错误快速失败;网络 4xx/5xx 快速失败;通过 browser_eval_js 进行 LCP/内存审计 |
| 8 | 移动端 & 视口 | browser_set_view_mode 移动端/桌面端矩阵;browser_computer(action="zoom") 微检查 |
渐进式参考路由器表
| 任务重点 | 加载参考 |
|---|
| 探索性缺陷查找、首次流程、模态焦点、导航 | references/01-exploratory-and-flows.md |
| 表单验证、边界模糊测试、文件上传、拖拽、Canvas、XSS | references/02-forms-components-security.md |
| WCAG 审计、对比度、缩放重排、CLS、触摸目标、视觉差异 | references/03-layout-a11y-visual.md |
| SW 生命周期、IndexedDB、离线同步、印度语系排版、权限 | references/04-pwa-offline-i18n-apis.md |
| 页面内审计片段(孤立标签、边界框、对比度、SW、IndexedDB) | references/05-eval-js-audit-snippets.md |
快速参考:browser_mcp 工具映射
| 上游原始操作 | AntiGem 工具 |
|---|
page.fill() / selectOption() / check() | browser_form_input(ref, value) |
page.click() / keyboard.press() / hover() / dragAndDrop() | browser_computer(left_click, hover, left_click_drag, key, scroll_to, ...) |
page.setInputFiles() | browser_upload_file |
page.on('dialog') | browser_handle_dialog(accept=true/false) |
page.evaluate() | browser_eval_js(顶级 await,返回 JSON) |
page.on('console') / page.on('pageerror') | browser_get_console_logs(pattern="...") |
page.on('response') / HAR | browser_read_network |
| 多步骤链 | browser_batch + browser_lock |
| 视口 / 截图 / 缩放 | `browser_set_view_mode + browser_computer(screenshot |
常见错误
- 跳过
browser_lock → 意外的触摸/缩放会破坏 ref ID
- 使用坐标而不是 refs → 脆弱,重排时会失效
- 未运行运行时门控 → 遗漏控制台错误/失败的请求
- 一次加载所有参考 → 令牌膨胀;根据路由器表按需加载
- 忘记
browser_lock(false) → 为用户锁定了标签页
实际影响
- 通过
browser_find/browser_read_page(filter="interactive"),相比完整 DOM 快照,令牌减少 90%
- 单次
browser_eval_js 调用即可运行全屏审计(无障碍 + 几何 + 对比度 + SW + IndexedDB)
- 零容忍运行时门控在回归到达用户之前捕获它们