browser‑use 自然语言 UI 自动化测试完整总结

定位:LLM + Playwright 浏览器 Agent,不用手写 XPath/CSS 选择器,用自然语言写测试步骤,自动完成 E2E 操作、页面断言、截图取证。 环境要求:Python ≥3.11;适合:冒烟测试、探索性测试、业务用例原型;不适合高可靠高频回归流水线

整体架构

plaintext

自然语言测试用例文本
        ↓
browser‑use Agent(LLM)
        ↓
Playwright CDP浏览器驱动
        ↓
被测Web页面
        ↓
Agent视觉+DOM解析 → 执行操作、断言判断
        ↓
输出 PASS/FAIL + 操作日志 + 截图证据

最小可运行 Demo

python

运行

import asyncio
from dotenv import load_dotenv
from browser_use import Agent, Browser, BrowserConfig
from langchain_openai import ChatOpenAI

load_dotenv()

browser = Browser(
    config=BrowserConfig(
        headless=False,
        viewport_width=1440,
        viewport_height=900,
    )
)

test_case = """
测试目标:验证百度搜索功能
1. 访问 https://www.baidu.com
2. 在搜索框输入 browser‑use UI自动化测试
3. 点击搜索按钮
4. 断言:页面出现搜索结果列表,页面标题包含browser‑use
5. 如果没有出现搜索结果,标记测试失败,说明失败现象
输出格式:测试结果(PASS/FAIL) + 简要测试结论
"""

async def run_ui_test():
    llm = ChatOpenAI(model="gpt-4o", temperature=0)
    agent = Agent(
        task=test_case,
        llm=llm,
        browser=browser,
        max_steps=20,
    )
    history = await agent.run()
    result = history.final_result()
    print("测试输出:", result)

    # 保存截图
    for step in history.steps:
        if step.screenshot:
            with open(f"test_screenshot_{step.index}.png", "wb") as f:
                f.write(step.screenshot)

    await browser.close()
    return result

if __name__ == "__main__":
    asyncio.run(run_ui_test())

关键参数说明

  1. temperature=0:测试场景必须设置,减少大模型随机性
  2. max_steps:限制最大操作步数,防止 Agent 死循环
  3. 用例内显式写明断言规则,明确什么算 PASS、什么算 FAIL
  4. 自动保存截图,作为缺陷证据

pytest 工程化封装 test_ui.py

python

运行

import asyncio
import pytest
from dotenv import load_dotenv
from browser_use import Agent, Browser, BrowserConfig
from langchain_openai import ChatOpenAI

load_dotenv()

@pytest.fixture(scope="function")
async def browser_fixture():
    browser = Browser(config=BrowserConfig(headless=False))
    yield browser
    await browser.close()

test_cases = [
    (
        "百度搜索冒烟用例",
        """
        访问https://www.baidu.com
        输入"AI自动化测试",执行搜索
        断言:页面展示多条搜索结果。
        返回 PASS 或者 FAIL,附带失败原因
        """
    ),
    (
        "百度首页元素校验",
        """
        打开百度首页
        断言页面存在搜索输入框、百度logo
        返回 PASS 或者 FAIL,附带失败原因
        """
    )
]

@pytest.mark.asyncio
@pytest.mark.parametrize("case_name,task", test_cases)
async def test_natural_language_ui(case_name, task, browser_fixture):
    llm = ChatOpenAI(model="gpt-4o", temperature=0)
    agent = Agent(
        task=task,
        llm=llm,
        browser=browser_fixture,
        max_steps=15
    )
    history = await agent.run()
    output = history.final_result()
    print(f"\n【{case_name}】结果:{output}")
    assert "PASS" in output, f"测试用例 {case_name} 失败:{output}"

执行命令:

bash

pytest test_ui.py -v

✅ 高质量自然语言用例模板

plaintext

【测试场景】登录页面正常登录
前置:访问登录页面 http://xxx/login
步骤:
1. 在用户名输入框输入 admin
2. 在密码框输入 123456
3. 点击登录按钮
断言规则:
- 登录成功:页面跳转首页,出现“欢迎admin”文字 → PASS
- 页面停留在登录页、出现错误提示 → FAIL,记录提示文本
输出:只输出:结果(PASS/FAIL) + 现象描述
最大操作步骤:12步
禁止执行网站以外域名,禁止点击广告弹窗

❌ 反例:去登录系统,看看能不能登录成功,描述模糊,AI 判断不可控。

稳定性增强配置

python

运行

agent = Agent(
    task=test_case,
    llm=llm,
    browser=browser,
    max_steps=20,
    allowed_domains=["your‑test‑domain.com"], # 限制访问域名,避免误点广告跳转
    use_vision=True, # 开启视觉理解,复杂UI表现更好
)

局限性 & 落地建议

  1. LLM 随机性:会出现选错元素,不适合核心强回归流水线;适合冒烟、探索测试、原型验证。
  2. 弹窗广告会干扰执行,用allowed_domains+ 用例指令规避。
  3. 每次操作调用大模型 API,速度慢,存在 Token 成本。
  4. 推荐混合方案:核心业务流程硬编码 Playwright;次要 / 新页面用 browser‑use 做冒烟

实用进阶点

  1. Cookie 复用登录态

python

运行

context = await browser.get_context()
cookies = await context.cookies()
# 保存cookies,下一轮测试加载复用登录态
await context.add_cookies(cookies)
  1. Web‑UI 调试工具:browser‑use web‑ui 网页录入自然语言用例,可视化调试,调试完成复制 task 到 pytest 脚本。
  2. 模型替换:可接入 DeepSeek‑V3、Qwen‑VL 开源模型,降低 API 开销,但稳定性会下降。
  3. 报告扩展:解析history对象,拿到每一步操作、截图、思考过程,对接 Allure 生成完整测试报告。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值