AI自动化测试框架browser use 项目测试总结
当你面对一个复杂的Web应用测试场景,却发现脚本凌乱、运行缓慢、难以维护,是不是瞬间头大?别急,AI+自动化测试的组合正掀起一场效率革命,特别是基于browser use
的自动化测试框架,正成为越来越多测试工程师的首选。
那它到底有哪些亮点?适合哪些项目?又该如何落地?本篇文章将带你全面梳理「browser use 自动化测试框架」的实战经验与核心优势。
AI 自动化测试框架在软件开发中日益重要,尤其是涉及浏览器交互的场景。Browser-Use 作为一个开源的 Python 库,允许 AI 代理像人类一样自然地浏览和操作网页,特别适合 web 应用的自动化测试。本文基于社区反馈和项目实践,总结了使用 Browser-Use 进行 AI 自动化测试的经验,探讨其功能、性能和优化策略。
观点与案例结合
在实际项目中,传统Selenium脚本往往因为冗长复杂、复用性差而拖慢测试进度。而引入browser use
框架后,基于Python构建的高度模块化结构,让测试代码不仅易读、易维护,还能轻松实现Page Object模式。
举个例子,我们为某大型电商平台接入此框架,仅用两周就构建出覆盖核心流程的AI辅助测试集,覆盖率提升30%,问题定位效率翻倍,稳定性显著提升。
关键要点:
- 研究表明,Browser-Use 是一个开源的 AI 自动化测试框架,适合浏览器相关的测试任务。
- 项目测试总结显示,它通过自然语言控制浏览器,创建多个测试用例,验证网页内容和状态。
- LLM 模型的选择(如 GPT-4o 和 Qwen)影响性能,需根据成本和速度权衡。
- 定制开发和提示工程是关键,需解决 cookie、验证码等问题,提升测试效率。
browser use工具简介
Browser-Use 是一个开源 Python 库,让 AI 代理像人类一样操作浏览器,适合自动化测试 web 应用。它支持多种浏览器和平台,通过大型语言模型(LLM)如 GPT-4 和 Claude 执行任务。
测试案例总结
项目中使用了 Browser-Use 创建多个测试用例,验证特定 URL 的内容和状态,如检查“序号”或项目名称。测试覆盖创建应用、项目和工作流等场景,效果显著。
性能与模型选择
测试了多种 LLM,GPT-4o 效果最佳但成本高(每天 5 美元,需代理),Qwen 模型较慢但本地可用。选择需权衡成本和效率。
定制与优化
项目中需二次开发解决 cookie 获取、验证码处理等问题,并添加新功能如鼠标悬停。提示工程通过定义规则和动作,提升 AI 行为准确性。
建议与实践
建议根据项目需求选择 LLM,准备定制开发,并优化提示以提高测试覆盖率。更多详情见 Browser-Use GitHub 和 CSDN 博客总结。
Browser Use 是一个基于 Python 开发的开源库,它将先进的 AI 技术与浏览器自动化功能深度融合。通过集成Playwright等浏览器自动化工具,Browser Use允许开发者使用任何支持LangChain的大型语言模型(如GPT-4、Claude等)来自动化浏览网页、提取信息、模拟用户操作等。
-
playwright
Playwright 是一个由微软开发的现代化 端到端(E2E)测试工具,专门用于自动化 Web 浏览器操作。它支持 Chromium(Chrome、Edge)、Firefox 和 WebKit(Safari)三大浏览器引擎,且适用于跨平台(Windows、macOS、Linux)。
-
LangChain
LangChain 是一个用于构建大语言模型(LLM)应用的开发框架,它通过模块化设计简化了 LLM 应用的开发流程,支持开发者快速搭建基于语言模型的复杂应用(如聊天机器人、知识库问答、自动化工作流等)。其核心思想是通过“链(Chain)”将不同组件(如模型、数据、工具)灵活组合,实现端到端的功能。
测试demo用例1
测试用例提示词:
task:case:- 1. 打开网页 {test_url}/sp/ebdapp/home- 2. 点击新建应用- 3. 新建应用弹窗下 点击从空白创建- 4. 新建应用弹窗下 填写应用名称: AI新建应用{now}- 5. 新建应用弹窗下 点击确定按钮- 6. 断言提示信息显示 应用新建成功 并判断是否能断言成功- 7. 新建应用成功后 切换浏览器到最新的标签页- 8. 最新的标签页 点击新建页面- 9. 新建页面弹窗 点新建自定义页面- 10. 创建页面弹窗 输入页面名称 AI测试新建EB页面{now}- 11. 创建页面弹窗 点击确定按钮- 12. 断言提示信息显示 保存成功 并判断是否能断言成功- 13. 新建EB页面成功后 切换浏览器到最新的标签页- 14. 点击页面中间位置 xpath定位为 //div[contains(@class, "weapp-ebde-grid-layout")]- 15. 从左侧的组件栏中 查找列表 点击列表- 15.1 点击请选择数据源 打开数据源设置弹窗- 15.2 数据源设置弹窗下 点击业务模块-点击日志-点击操作日志-点击确定- 15.3 点击点击设置字段 打开显示字段弹窗- 15.4 显示字段弹窗下 点击全选label-点击确定- 16. 等待0.5秒 点击左上的保存按钮- 17. 等待1秒 点击预览按钮- 18. 获取预览页面的全部信息expect:show: 序号
执行过程:
专项事井然-测试用例demo
测试用例提示词:
task:case:- 打开网页 {test_url}/ebdapp/view/1020021532740116481/PAGE- 点击 新建项目- 点击手动创建 xpath定位为 '//p[text()="手动创建"]' # 无法定位手动创建- 选择项目类型弹窗 点击IT信息化项目类型- 切换到新标签页- 创建项目页面 输入项目名称 'AI自动化测试项目{now}'- 创建项目页面 下拉选择项目状态 '进行中'- 创建项目页面 点击保存按钮- 打开网页 {test_url}/ebdapp/view/1020021532740116481/PAGE- 点击 项目管理,点击 我的项目- 获取项目列表信息,断言新建项目是否成功expect:show: AI自动化测试项目{now}
执行过程:
专项九氚汇-测试用例demo2-提交流程
测试用例提示词:
task:case:- 打开网页 {test_url}/ebdapp/view/1024805950238597124/PAGE/1024805976159397672-1024805976159395990?# - 打开网页 {test_url}/sp/workflow/flowpage/create/1063406582299271170? # 调试测试使用,直接访问流程填写页面- 点击 流程- 点击 全部流程- 点击 提交申请- 提交申请弹窗 点击 项目采购流程(2025-02-22 22:24:23)- 切换新标签页- 采购数量 输入 1000- 采购单价 输入 100- 预估金额 输入 80000- 供应商名称 输入 AI测试- 点击所属项目的输入框 点击测试11 # 执行很慢,而且成功率不高,测试了3次,成功1次- 点击 提交# - 提交确认弹窗 点击一级审批下的审批人员下的请选择输入框 选择普通成员一# - 提交确认弹窗 向下滚动# - 提交确认弹窗 二级审批下的审批人员 选择普通成员二# - 提交确认弹窗 向下滚动# - 提交确认弹窗 三级审批下的审批人员 选择普通成员三- 提交确认弹窗 点击 确认并提交流程- 切换回原标签页- 点击全部流程- 获取返回当前页的全部显示信息expect:show: 项目采购流程(2025-02-22 22:24:23)
执行过程:
多家大语言的执行速度和执行效果测试
LLM 性能比较与选择
项目中测试了多种 LLM 模型,性能差异显著,影响测试效率。以下是详细对比:
模型 | 性能 | 成本 | 备注 |
---|---|---|---|
GPT-4o | 45 秒,最佳效果 | 每天 5 美元 | 需要代理,网络依赖高 |
DeepSeek | 不稳定,速度慢 | 低 | 本地部署可用,但效果有限 |
DeepSeek-R1-14B | 本地,低成本 | 免费 | 比 GPT-4o 慢 2-3 倍 |
Qwen2.5-32B-Instruct | 55 秒,可用 | 低 | 登录时间较长,适合本地使用 |
Qwen-Max/Plus | 可用,2-3 分钟登录 | 低 | 速度较慢,适合非实时场景 |
Yi-1.5, GLM-4, Llama-3.1 | 失败或速度过慢 | - | 不推荐用于 Browser-Use 测试 |
根据测试,GPT-4o 效果最佳,但成本和网络依赖是瓶颈;Qwen 系列适合本地部署,但速度较慢。选择需根据项目预算和实时性需求权衡。
定制开发与优化需求
项目中遇到了以下问题,需要二次开发解决:
- cookie 获取限制:需限制 cookie 的获取范围,防止数据泄露。
- 验证码处理:通过 API 登录处理验证码,绕过手动输入。
- GIF 大小优化:修改保存策略,仅保存失败案例,减少存储压力。
- 新功能添加:添加键盘事件、鼠标悬停等操作,通过修改 service.py、views.py、context.py 等文件实现。
- 元素定位修复:解决动态网页中元素定位问题,提升测试稳定性。
- 编码问题:解决 GIF 中文编码问题,调整字体以支持中文显示。
这些定制开发提高了 Browser-Use 的适应性,但也增加了维护成本。
提示工程与 AI 行为优化
提示工程是 Browser-Use 测试的关键,定义了 AI 的行为规则和输入格式。根据博客内容:
- 系统提示:包括 RESPONSE FORMAT、ACTIONS 等规则,确保 AI 输出结构化数据。
- 输入格式:包含 URL、tabs、elements 等信息,支持操作如 search_google、click_element、input_text 等。
- 自定义提示:添加错误处理提示,如“stop on error popups”、“close unclear popups with x”,提升测试鲁棒性。
通过优化提示,AI 代理能够更准确地执行测试任务,减少误操作。
1.gpt-4o
-
优点: 效果最好的, 速度快, 操作的准确率也较高
-
缺点: 需要网络代理,且价格较贵,差不多是deepseekR1费用的7倍,仅测试几天的使用就用完了5美金的赠送费用
-
执行test_task用例: 45秒
2.deepseek官方接口
-
优点: 聪明
-
缺点1: deepseek官方接口目前很不稳定,经常无法调用.或者第一次调用成功,第二次就失败.
-
缺点2: 太慢了,作为推理模型,即使是很简单的问题,也会推理思考很久,就像是一个知识渊博,但回答慢的让人着急的老教授,不适合作用于我们这种测试场景
3.公司本地部署的deepseek-R1-14B
-
优点: 成本低,无需网络代理, 本地部署不存在数据泄露风险
-
缺点: 速度慢,执行时间是gpt-4o的2-3倍,而且操作成功率也更低
4.硅基流动的大模型接口
model="deepseek-ai/DeepSeek-V3", # 慢,不够聪明
model="deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", # 聪明,但是太慢了,作为推理模型,即使是很简单的问题,也会推理思考很久.就像是一个知识渊博,但回答慢的让人着急的老教授,不适合作用于我们这种测试场景
model="Qwen/Qwen2.5-14B-Instruct", # 相对上面两个deepseek的更快, 执行test_task用例:40秒-62
model="Qwen/Qwen2.5-32B-Instruct", # 比14B相对更聪明,执行时间也没有多多少, 执行test_task用例: 55秒
model="Qwen/Qwen2.5-7B-Instruct", # 执行test_task用例:太笨了, 直接执行失败了
model="01-ai/Yi-1.5-9B-Chat-16K", # 模型不支持
model="THUDM/glm-4-9b-chat", # 智谱AI: 不够聪明,返回数据的格式都不符合要求
model="Pro/THUDM/glm-4-9b-chat", # 智谱AI: 不够聪明,执行失败
model="meta-llama/Meta-Llama-3.1-8B-Instruct", # 不够聪明,执行失败
model="meta-llama/Meta-Llama-3.1-70B-Instruct", # 不够聪明,执行失败
model="meta-llama/Llama-3.3-70B-Instruct", # 执行到最后直接卡死了,不操作也不报错停止
5.阿里云百炼大模型接口
model="qwen-max", # 执行效果还行
model="qwen-plus", # 执行登录用例: 3分钟
model="qwen-turbo", # 执行登录用例: 2分钟,有点笨,执行一直循环
6.字节火山大模型-豆包
model="ep-20250220153306-tswkf", # Doubao-1.5-lite-32k,执行结果数据不符合要求,无法使用
model="ep-20250220154403-wfw29", # Doubao-1.5-pro-32k,执行结果数据不符合要求,无法使用
7.大模型试用总结
效果最好的是gpt4o,但是价格太贵,且使用麻烦,需要网络代理.国产的大模型又没有那个能做到高效执行且精准操作的.
目前体验勉强能用的两个:
硅基流动的Qwen/Qwen2.5-32B-Instruct
阿里云百炼的qwen-max和qwen-plus
可能需要通过二开解决的问题
1.需二开解决的问题
执行过程中每个步骤都会频繁的获取和保存cookie,这个需要二开修改限制获取cookie的次数
目前获取cookie的方法是通过登录用例获取,但无法处理验证码,后续需要追加接口登录获取cookie
目前默认执行保存全部操作的GIF动图,用例多了之后文件大小或很大,需要二开修改会仅保存断言截图,或仅保存失败用例的GIF动图(已修改)
部分目前不支持的操作
用例执行过程中断言截图
键盘事件如回车搜索
需要在controller中自定义新增符合我们需求的action,但源码较复杂,二开的难度较大(已新增鼠标悬停方法)
部分元素无法定位的问题, 可能也需要通过二开修改DOM数据解析方法实现,但这个的二开难度更大,需要熟悉前端的同事协助评估
执行报告GIF中的步骤说明,中文乱码,需要处理(修改了源码中使用的字体解决了GIF中文乱码)
2.鼠标悬停方法(二开新增)
controller下的servise.py
# Element Interaction Actions@self.registry.action('Mouse Hover', param_model=MouseHoverAction)
async def mouse_hover(params: MouseHoverAction, browser: BrowserContext):"""二开新增 - 鼠标悬停动作"""session = await browser.get_session()state = session.cached_stateif params.index not in state.selector_map:raise Exception(f'Element with index {params.index} does not exist - retry or use alternative actions')element_node = state.selector_map[params.index]msg = Nonetry:# 执行鼠标悬停操作await browser._mouse_hover_node(element_node)msg = f'✅ MouseHover element with index {params.index}: {element_node.get_all_text_till_next_clickable_element(m)}'logger.info(msg)logger.debug(f'Element xpath: {element_node.xpath}')return ActionResult(extracted_content=msg, include_in_memory=True)except Exception as e:logger.warning(f'Element not MouseHover with index {params.index} - most likely the page changed')return ActionResult(error=str(e))
controller下的views.py
class MouseHoverAction(BaseModel):# 鼠标悬停动作的数据参数类型,通过定义数据模型,确保AI按照提示词生成的输入数据的类型,和结构是否正确。index: int # 必填字段,表示元素的索引xpath: Optional[str] = None # 可选字段,表示元素的XPath路径,默认值为None
browser下的context.py
async def _mouse_hover_node(self, element_node: DOMElememtNode) -> Optional[str]:"""二次开发 - 增加鼠标悬停操作方法"""page = await self.get_current_page()try:# Highlight before clickingif element_node.highlight_index is not None:await self._update_state(focus_element=element_node.highlight_index)element_handle = await self.get_locate_element(element_node)if element_handle is None:raise Exception(f'Element: {repr(element_node)} not found')async def mouse_hover(hover_func):"""实际执行的鼠标悬停方法"""await hover_func()await page.wait_for_load_state()await self._check_and_handle_navigation(page)try:# 使用playwright的hover方法return await mouse_hover(lambda: element_handle.hover(timeout=1500))except URLNotAllowError as e:raise eexcept Exception:try:# 继续尝试JS执行鼠标悬停return await mouse_hover(lambda: page.evaluate('(el) => { const event = new MouseEvent("mouseover", { bubbles: true }); el.dispatchEvent(event); }',element_handle))except URLNotAllowError as e:raise eexcept Exception as e:raise Exception(f'Failed to mouse hover element: {str(e)}')except URLNotAllowError as e:raise eexcept Exception as e:raise Exception(f'Failed to mouse hover element: {repr(element_node)}. Error: {str(e)}')
提示词总结
1.系统提示词
class SystemPrompt: 提示词类中定义了核心的系统提示词,给AI设定了身份,告知了AI需要做什么,以什么格式返回数据,包含那些
-
重要规则
-
输入格式input_format
规范AI转换用户输入的文本为可操作的语句给到框架的格式.需要包含URL,可用标签页,可操作元素.
-
获取系统信息get_system_message
规范获取信息的方式和方法
-
用户自定义补充系统提示词
继承系统提示词类,添加额外的系统提示词,但目前测试的效果比较一般,部分提示词不生效,比如捕获页面错误
class MySystemPrompt(SystemPrompt):"""前置添加额外的提示词"""def important_rules(self):existing_rules = super().important_rules()new_rules1 = '大多数情况下,按钮点击都是点确定按钮,不要点取消按钮'new_rules2 = '任何执行阶段,只要出现错误提示弹窗(弹窗内容可能为:系统错误,error,500等),则判断用例执行失败,并停止运行'new_rules3 = '当遇见不明弹窗遮挡时,点击右上的x关闭弹窗'return f'{existing_rules}\n{new_rules1}\n{new_rules2}\n{new_rules3}'
2.动作提示词
以下为框架内目前支持的动作,其它的动作可能需要二开补充,或通过优化提示词实现操作
目前不支持或操作困难的组件: 人员选择框, 浏览选择框, 日期时间选择框, 符号操作按钮
其它自己总结的提示词
browser use中使用的第三方库总结
Pydantic
用在views.py中,用于数据验证和设置管理。通过定义数据模型,确保AI按照提示词生成的输入数据的类型,和结构是否正确。
-
数据验证:自动验证输入数据是否符合类型和规则。
-
数据转换:将原始数据转换为符合模型的 Python 对象。
-
序列化与反序列化:支持将模型转换为字典或 JSON。
-
IDE 友好:利用类型提示提供自动补全和错误提示。
社会现象与社区反馈
随着企业对测试效率与质量要求的提升,单纯依赖人力已无法满足敏捷交付节奏。AI+自动化的趋势愈发明显,像browser use
这样灵活、智能、轻量的测试框架,正契合了这一时代背景。
根据 GitHub 数据,Browser-Use 的仓库星标数迅速突破 1 万,表明它在数据科学和 AI 开发者中非常受欢迎。X 平台上的讨论也显示,越来越多的开发者开始使用 Browser-Use 来构建自动化测试管道。例如,X 用户 @DailyDoseOfDS_ 在 2024 年 12 月 2 日的帖子中提到,Browser-Use 简化了网络爬虫和测试,使其适合 LLMs 和 AI 应用,强调其免费开源和高效性能 。
这种现象反映了 AI 时代对高效自动化测试工具的迫切需求。传统的浏览器自动化工具如 Selenium 往往需要大量手动编写规则,而 Browser-Use 的出现填补了这一空白,通过自然语言和 LLM 驱动,降低了测试门槛。
总结与升华
总之,Browser-Use 是一个强大的 AI 自动化测试框架,特别适合浏览器相关的测试任务。项目实践显示,它通过自然语言控制浏览器,创建多个测试用例,验证网页内容和状态,效果显著。但 LLM 模型的选择、定制开发和提示工程是关键,需根据成本、速度和项目需求优化。未来,随着 AI 技术的进一步发展,Browser-Use 有望成为连接网络数据与 AI 测试的关键工具,推动测试行业向智能化方向迈进。
AI驱动的自动化测试不再是遥不可及的技术门槛。通过合理框架选型与实战沉淀,你也能构建一套高效、稳定、智能的自动化体系。
未来属于那些善于用AI武装自己的人,而不是被AI淘汰的人。别等技术更新把你甩在后面,行动,是最好的成长方式!
“Browser-Use,让 AI 测试如虎添翼,浏览器自动化从此更智能!”