AI Agent 高级 25分钟

Computer Use 自动化测试

基于 Claude Computer Use 能力的端到端自动化测试系统,支持视觉验证和复杂交互流程测试。

Claude 3.5 SonnetPlaywrightComputer UsePythonpytest

项目概述

传统 UI 自动化测试高度依赖 DOM 选择器和 XPath 定位元素,页面结构稍有变动就会导致大量测试脚本失效。维护成本高、编写门槛高、对动态交互缺乏有效验证手段。

本案例展示了一个基于 Anthropic Claude Computer Use 能力的端到端自动化测试系统。与传统测试框架不同,测试 Agent 通过"看屏幕"来理解应用状态,像人类用户一样操作界面,实现真正视觉驱动的自动化测试。

关键指标

提升 5x
测试编写效率
90%+ 自动适应
UI变更适应率
100%
视觉覆盖率
< 3%
误报率

系统架构

系统以 Claude Computer Use Agent 为核心,结合 Playwright 浏览器控制能力和 pytest 测试编排框架,形成"视觉理解 → 操作执行 → 状态验证"的闭环。

┌──────────────────────────────────────────────────────┐
│                  测试编排层 (pytest)                    │
├──────────────────────────────────────────────────────┤
│  ┌──────────────┐  ┌──────────────┐  ┌────────────┐  │
│  │  测试用例管理  │  │  断言与报告   │  │  失败重试   │  │
│  └──────┬───────┘  └──────┬───────┘  └─────┬──────┘  │
│         │                │                │          │
├─────────┴────────────────┴────────────────┴──────────┤
│             Computer Use Agent (Claude)                │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐            │
│  │ 屏幕截图  │  │ 元素分析  │  │ 操作决策  │            │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘            │
│       │             │             │                    │
├───────┴─────────────┴─────────────┴──────────────────┤
│             浏览器控制层 (Playwright)                   │
│  ┌──────────────┐  ┌──────────────┐  ┌────────────┐  │
│  │  页面导航     │  │  鼠标/键盘   │  │ 截图获取    │  │
│  └──────────────┘  └──────────────┘  └────────────┘  │
└──────────────────────────────────────────────────────┘

实现细节

1

测试用例设计

行为描述式用例

测试用例以自然语言描述用户行为而非 DOM 操作:如"用户点击登录按钮后,应看到欢迎页面"。Agent 自主理解并执行。

视觉断言

断言基于 UI 视觉状态而非 DOM 属性:验证按钮是否可见、弹窗是否出现、页面是否渲染正确,完全通过截图分析判断。

智能等待

Agent 自动识别页面加载状态(旋转加载图标消失、按钮可点击、文本渲染完成),无需人工设置显式等待时间。

2

执行引擎

屏幕理解

每秒捕获浏览器截图,Claude Computer Use 模型分析屏幕内容,识别可交互元素的位置和类型(按钮、输入框、下拉菜单等)。

操作生成

Agent 根据测试目标和当前屏幕状态,生成下一步操作:点击坐标、输入文本、选择下拉项、拖拽等。支持鼠标和键盘操作。

状态跟踪

维护一个操作历史堆栈,记录每一步前后的屏幕状态和操作结果。失败时自动回溯到上一个稳定状态,支持智能重试。

3

报告与审计

全流程截图

每次测试运行都生成完整的截图序列,从开始到结束记录每一步的屏幕状态,便于回溯和调试。

差异对比

运行结果与基线截图自动对比,标记视觉差异区域。支持像素级 Diff 和语义级差异(如文案变化、元素缺失)。

AI 分析报告

Agent 自动生成测试摘要,包括:通过的测试数、失败原因分析、推荐的修复方案、UI 变化对功能的影响评估。

核心测试用例示例

import pytest
from computer_use_test import ComputerUseTester, visual_assert

class TestUserLogin:
    """用户登录流程测试"""

    async def test_successful_login(self, tester: ComputerUseTester):
        # 行为描述:Agent 自动理解并执行
        await tester.navigate("https://app.example.com/login")

        # Agent 通过"看屏幕"找到输入框
        await tester.type_text("username", "admin@company.com")
        await tester.type_text("password", "P@ssw0rd123")
        await tester.click("登录按钮")

        # 视觉断言:Agent 分析屏幕判断是否登录成功
        await visual_assert(tester).contains_text("欢迎回来")
        await visual_assert(tester).element_visible("个人工作台")
        await visual_assert(tester).element_not_visible("登录表单")

    async def test_login_error(self, tester: ComputerUseTester):
        await tester.navigate("https://app.example.com/login")
        await tester.type_text("username", "wrong@user.com")
        await tester.type_text("password", "wrongpassword")
        await tester.click("登录按钮")

        # 验证错误提示
        await visual_assert(tester).element_visible("错误提示弹窗")
        await visual_assert(tester).contains_text("用户名或密码错误")

    async def test_password_reset_flow(self, tester: ComputerUseTester):
        """测试忘记密码流程"""
        await tester.navigate("https://app.example.com/login")
        await tester.click("忘记密码")

        # 视觉跟踪:Agent 跟随页面变化自动调整
        await tester.assert_page_transitioned("重置密码页面")
        await tester.type_text("邮箱", "admin@company.com")
        await tester.click("发送重置链接")

        screenshot = await tester.capture_snapshot()
        assert screenshot.contains_text("重置链接已发送")

经验教训

  • 视觉测试不是万能的 — 对于纯数据验证(如表格数值、API 响应),传统断言仍然更可靠。最佳实践是视觉测试 + 传统测试混合使用
  • 截图质量是瓶颈 — 低分辨率、字体渲染差异、动画未完成都会影响 Agent 的视觉理解,建议固定分辨率和字体配置
  • 执行时间较长 — 每次"看屏幕再操作"的循环约 1-2 秒,一个 10 步的测试用例需要 15-20 秒。适合端到端场景,不适合高频回归
  • 权限与安全 — Agent 能操控浏览器意味着能访问敏感页面,需要严格控制运行环境和权限

更多案例

查看其他 AI 工程化落地案例

返回案例库