Open Interpreter结合Playwright实现自然语言驱动的UI自动化测试

📅 2026/7/1 20:56:24
Open Interpreter结合Playwright实现自然语言驱动的UI自动化测试
1. 项目概述当Open Interpreter遇见UI自动化测试最近在测试圈子里Open Interpreter这个工具的热度持续攀升尤其是在结合大语言模型能力进行自动化脚本生成方面。很多同行都在问有没有一种方法能让我们摆脱重复编写那些繁琐的定位器XPath、CSS Selector和流程控制代码直接告诉AI我们想测什么它就能自动生成可执行的UI测试脚本并且一键部署到测试环境中去跑这正是“Open Interpreter自动化测试UI测试脚本生成部署教程”这个项目要解决的核心问题。简单来说这个项目探索的是一条从“自然语言描述”到“自动化测试执行”的端到端流水线。你不再需要是一个精通Selenium、Playwright或Appium的专家只需要用人类语言描述你的测试场景比如“登录电商网站搜索‘手机’将第一个商品加入购物车然后去结算页面”Open Interpreter结合背后的大模型如GPT-4、Claude 3等就能理解你的意图生成对应的Python测试脚本并利用其代码执行环境自动运行或者将脚本部署到CI/CD流水线中。这不仅仅是“录制回放”的升级而是基于语义理解的智能脚本创作尤其适合快速验证新功能、生成冒烟测试用例或者为复杂的业务流程搭建自动化测试骨架。它适合谁呢首先是测试工程师特别是那些希望提升效率、减少重复劳动的同学其次是开发人员可以在代码提交后快速生成一些集成测试来验证功能甚至产品经理或业务分析师也能参与进来用更自然的方式定义验收标准。当然这并不意味着传统自动化测试技能过时了恰恰相反理解其原理、能修正AI生成的脚本、设计稳健的测试框架变得更为重要。接下来我就结合自己的实操经验拆解这套方案从设计思路到落地部署的全过程。2. 核心思路与方案选型背后的考量为什么选择Open Interpreter作为核心工具而不是直接调用大模型的API这里面的考量有几个层面。Open Interpreter本质上是一个赋予大语言模型LLM代码执行能力的开源项目。它不像单纯的聊天接口你问它“怎么写一个登录测试”它只能给你一段示例代码。Open Interpreter可以让模型在沙箱环境中真正地“思考并执行”它可以运行命令、安装包、读写文件、执行生成的代码并观察结果。这对于UI自动化测试来说是天作之合因为测试本身就是一个“执行-验证-反馈”的循环。2.1 方案核心自然语言驱动的工作流我们的目标工作流是用户输入测试需求 - Open Interpreter调用LLM理解需求并生成代码 - Open Interpreter在可控环境中执行代码 - 收集执行结果日志、截图 - 生成测试报告。这个闭环中Open Interpreter扮演了“翻译官”和“执行者”双重角色。它省去了我们手动复制代码、创建文件、配置环境、运行脚本的步骤实现了“一句话启动测试”。2.2 为什么不是纯API调用如果只用大模型API流程会断裂拿到代码后你需要手动搭建Python环境安装selenium/webdriver处理浏览器驱动然后执行。任何环境差异如Chrome版本都可能导致脚本失败。Open Interpreter可以将环境准备也自动化它能在其会话中执行pip install playwright和playwright install确保运行时环境是就绪的。这是一种更接近“最终用户”体验的自动化。2.3 框架选型Playwright vs Selenium在UI自动化框架上我强烈推荐Playwright作为Open Interpreter的默认生成目标。原因如下自动等待机制Playwright的API内置智能等待对网络请求、元素加载的判断更准确生成的脚本稳定性远高于需要大量time.sleep的Selenium脚本。这对于AI生成的代码来说至关重要减少了因时机问题导致的失败。强大的选择器引擎Playwright支持文本选择器text、角色选择器role这些比脆弱的XPath更贴近自然语言描述。当你说“点击登录按钮”时AI更容易生成page.click(\text登录\)而不是一长串复杂的XPath。多浏览器支持与录制功能Playwright支持Chromium、Firefox、WebKit且其codegen录制工具能产生高质量代码这为AI生成提供了优秀的参考范式。一体化安装简单自带浏览器无需单独管理WebDriver。当然如果项目历史包袱重必须用SeleniumOpen Interpreter也完全可以生成。只需在给AI的指令中明确指定框架即可。但为了成功率和可维护性在新项目中Playwright是更优解。2.4 Open Interpreter的配置要点Open Interpreter默认使用GPT-4但也可以通过--model参数配置为Claude、本地部署的Ollama模型等。对于测试脚本生成模型的“思考”和“规划”能力很重要。建议使用能力较强的模型如GPT-4、Claude 3 Opus它们在代码生成和逻辑理解上更准确。成本方面可以通过设置--max_tokens和--context_window来控制单次交互的消耗。注意在自动化执行涉及外部网站或内部系统的操作时务必在安全、隔离的环境如测试专用的虚拟机或容器中进行并遵守相关系统使用规范。切勿在生产环境直接运行未经充分审查的AI生成脚本。3. 环境准备与Open Interpreter实战配置理论说得再多不如动手跑一遍。下面我带大家走通从零开始配置Open Interpreter并生成第一个UI测试脚本的全过程。这个过程我会把每个步骤的意图和可能遇到的坑都讲清楚。3.1 基础环境搭建首先你需要一个Python环境建议3.8以上。我习惯使用conda或venv创建独立的虚拟环境避免包冲突。# 创建并激活虚拟环境 python -m venv open-interpreter-test source open-interpreter-test/bin/activate # Linux/Mac # 或 open-interpreter-test\Scripts\activate # Windows # 安装Open Interpreter pip install open-interpreter安装完成后在终端直接输入interpreter即可启动。首次启动会提示你配置API KeyOpenAI的或其它兼容模型的。你可以选择在命令行输入也可以设置环境变量OPENAI_API_KEY。3.2 关键配置让Open Interpreter“专注”于测试默认的Open Interpreter能力很广可以操作文件、上网搜索等。但为了让它更可靠地生成测试脚本我们需要通过系统指令System Message来约束它的行为。这是至关重要的一步直接决定了生成代码的质量和安全性。我们可以创建一个配置文件比如test_config.yaml或直接在启动时传入一个精心设计的系统提示词。核心思想是告诉AI你的角色一个专业的UI自动化测试工程师专门使用Playwright for Python。任务目标根据用户需求生成完整、可运行、稳健的UI测试脚本。输出规范代码必须包含必要的导入、清晰的步骤注释、合理的等待和断言。安全限制不允许执行危险命令如rm -rf不访问未经明确授权的网址。一个简化的启动方式示例通过-s传入系统消息interpreter -s 你是一个UI自动化测试专家使用Playwright for Python编写脚本。你的任务是1. 理解用户的中文测试需求。2. 生成一个完整的、可执行的Python脚本文件。3. 脚本应包含从launch browser开始到close browser结束。4. 使用try-except处理异常并对关键步骤进行断言验证。5. 使用相对稳定的选择器如text选择器或data-testid。6. 不要执行任何与测试无关的系统命令。3.3 首次对话生成一个登录测试脚本环境就绪后我们开始第一次“对话式”测试开发。在Open Interpreter的对话界面中输入你的测试需求“请为我生成一个测试脚本用于测试‘example.com’的登录功能。假设用户名输入框的placeholder是‘请输入用户名’密码框的placeholder是‘请输入密码’登录按钮的文字是‘登录’。测试用例是输入正确的用户名‘testuser’和密码‘testpass123’验证登录成功后页面标题是否包含‘仪表板’字样。”Open Interpreter背后的LLM会开始“思考”并可能输出类似以下的代码from playwright.sync_api import sync_playwright import sys def test_login(): with sync_playwright() as p: # 启动浏览器headlessFalse表示可以看到浏览器界面 browser p.chromium.launch(headlessFalse) context browser.new_context() page context.new_page() try: # 导航到登录页面 page.goto(https://example.com/login) page.wait_for_load_state(networkidle) # 等待网络空闲 # 输入用户名 username_input page.get_by_placeholder(请输入用户名) username_input.fill(testuser) # 输入密码 password_input page.get_by_placeholder(请输入密码) password_input.fill(testpass123) # 点击登录按钮 login_button page.get_by_text(登录, exactTrue) login_button.click() # 等待导航完成并断言标题 page.wait_for_url(**/dashboard**) # 假设登录后跳转到dashboard页面 assert 仪表板 in page.title() print(登录测试通过) except Exception as e: print(f测试失败错误信息: {e}) # 这里可以保存错误截图非常有用 page.screenshot(pathlogin_test_failure.png) sys.exit(1) # 非零退出码表示失败 finally: # 关闭浏览器 browser.close() if __name__ __main__: test_login()你会发现AI生成的代码结构清晰包含了异常处理和截图功能这比很多新手写的脚本还要规范。Open Interpreter在生成这段代码后通常会问你是否要执行它。你可以选择“y”让它直接运行观察测试过程。3.4 实操心得如何写出更好的提示词Prompt第一次生成的脚本可能不完美比如选择器不够精准或者等待逻辑有问题。这需要我们通过“对话”来迭代优化。这就是提示词工程在测试领域的应用。要具体不要说“测试购物流程”而要说“从首页点击‘电子产品’分类选择第一个商品点击‘加入购物车’弹出侧边栏后点击‘去结算’在结算页面验证商品名称和单价正确”。指定选择器偏好明确告诉AI“优先使用page.get_by_role()或page.get_by_test_id()如果不行再用page.get_by_text()尽量避免使用XPath”。定义验证点明确说明什么是“成功”。是页面跳转是某个成功提示信息出现还是特定元素变得可见要求添加调试信息可以在提示词里加上“在关键步骤后打印日志信息例如‘已成功输入用户名’”。通过多轮交互你可以让AI修正代码比如将脆弱的page.get_by_text(“登录”)改为更精确的page.get_by_role(“button”, name”登录”)。这个过程本身也是对自己测试用例设计的一种梳理。4. 从单脚本到测试套件规模化生成与管理生成单个测试脚本很酷但实际项目需要的是成体系的测试套件。我们需要让Open Interpreter帮我们生成多个测试用例并以一种有组织的方式管理起来。4.1 生成参数化测试用例很多测试场景是数据驱动的。例如测试登录功能需要验证“正确密码”、“错误密码”、“空密码”等多种情况。我们可以引导Open Interpreter生成使用pytest和pytest.mark.parametrize的参数化测试。给Open Interpreter的提示词可以升级为“请生成一个使用pytest框架的测试文件test_login.py。包含一个参数化测试函数test_login_with_credentials测试数据包括(‘correct_user’, ‘correct_pwd’, True)表示期望登录成功(‘wrong_user’, ‘wrong_pwd’, False)表示期望登录失败并看到错误提示‘用户名或密码错误’。根据第三个布尔参数进行成功或失败的断言。”AI可能会生成如下更结构化的代码import pytest from playwright.sync_api import Page, expect # 测试数据 test_data [ (testuser, correct_password, True, 登录成功), (wronguser, anypassword, False, 用户名或密码错误), ] pytest.mark.parametrize(username,password,should_succeed,expected_message, test_data) def test_login_with_credentials(page: Page, username, password, should_succeed, expected_message): 参数化登录测试 page.goto(https://example.com/login) page.get_by_placeholder(请输入用户名).fill(username) page.get_by_placeholder(请输入密码).fill(password) page.get_by_role(button, name登录).click() if should_succeed: # 成功断言跳转到dashboard且标题包含“首页” expect(page).to_have_url(**/dashboard**) expect(page).to_have_title(/首页/) else: # 失败断言页面出现错误提示信息 error_locator page.get_by_text(expected_message) expect(error_locator).to_be_visible()4.2 生成页面对象模型Page Object Model, POM代码对于大型项目使用POM模式是保持测试代码可维护性的黄金法则。我们可以让Open Interpreter为我们生成POM的骨架。这需要更详细的指令。“请为‘example.com’的登录页面LoginPage和主页HomePage创建页面对象模型类。LoginPage包含元素定位器用户名框、密码框、登录按钮和login(username, password)方法。HomePage包含get_welcome_message()方法。然后创建一个使用这些Page类的测试用例test_login_with_pom。”Open Interpreter有望生成如下结构的代码# pages/login_page.py class LoginPage: def __init__(self, page): self.page page self.username_input page.get_by_placeholder(请输入用户名) self.password_input page.get_by_placeholder(请输入密码) self.login_button page.get_by_role(button, name登录) self.error_message page.get_by_test_id(login-error) # 假设有data-testid def navigate(self): self.page.goto(https://example.com/login) return self def login(self, username, password): self.username_input.fill(username) self.password_input.fill(password) self.login_button.click() return HomePage(self.page) # 返回下一个页面的对象 # pages/home_page.py class HomePage: def __init__(self, page): self.page page self.welcome_text page.get_by_test_id(welcome-msg) def get_welcome_message(self): return self.welcome_text.inner_text() # test_pom_login.py import sys sys.path.append(.) from pages.login_page import LoginPage def test_login_with_pom(page): login_page LoginPage(page).navigate() home_page login_page.login(testuser, correct_password) assert 欢迎回来 in home_page.get_welcome_message() print(POM模式登录测试通过)通过这种方式我们将页面细节封装起来测试用例变得非常清晰后期页面元素变更也只需修改对应的Page类。4.3 管理生成的代码项目结构建议当脚本多起来就需要一个合理的目录结构。你可以直接要求Open Interpreter为你创建这个结构。“请创建一个基本的UI自动化测试项目结构包含以下目录tests/存放测试脚本pages/存放Page Object类fixtures/存放pytest fixture如浏览器初始化utils/存放工具函数如数据读取reports/存放测试报告requirements.txt项目依赖。并在tests/下生成一个简单的conftest.py提供page fixture。”AI会生成一系列文件和目录并填充基础内容。这极大地加速了项目初始化。5. 自动化部署与集成让测试自己跑起来脚本生成好了总不能每次都手动打开Open Interpreter去触发。我们的目标是实现自动化部署让测试按计划或由事件触发执行。这里有几种主流的集成方案。5.1 方案一使用Open Interpreter的API模式与脚本模式Open Interpreter提供了编程接口API和非交互式脚本模式。我们可以写一个Python控制器调用Open Interpreter的API传入测试需求获取生成的代码然后保存并执行。# test_generator_runner.py import interpreter import subprocess import os # 配置Open Interpreter使用特定的模型和系统指令 interpreter.api_key your-api-key interpreter.system_message \\\你是一个UI测试代码生成器只输出Python代码不要任何解释。使用Playwright和pytest。\\\ def generate_and_run_test(test_scenario): # 向Open Interpreter发送消息获取代码 response interpreter.chat(test_scenario) # 假设AI的回复中代码部分被包裹在python ... 中 # 这里需要解析response提取出代码块。这是一个简化的示例。 generated_code extract_python_code(response) # 将代码保存到临时文件 test_file ftemp_test_{hash(test_scenario)}.py with open(test_file, w) as f: f.write(generated_code) # 安装依赖如果尚未安装 # subprocess.run([\pip\, \install\, \playwright\, \pytest\, \pytest-playwright\]) # 运行生成的测试 result subprocess.run([\pytest\, test_file, \-v\], capture_outputTrue, textTrue) # 清理临时文件 os.remove(test_file) print(result.stdout) if result.returncode ! 0: print(f\测试执行失败: {result.stderr}\) return result.returncode 0 # 示例运行一个测试场景 if __name__ \__main__\: scenario \测试在example.com上搜索‘Playwright’并验证结果页面标题\ success generate_and_run_test(scenario) print(f\测试生成与执行结果: {\成功\ if success else \失败\}\)5.2 方案二将生成的脚本纳入CI/CD流水线更常见的做法是将Open Interpreter作为“测试用例生成器”在需要时如每天凌晨、每次发布新版本前运行一次生成或更新一批测试脚本。然后将这些生成的脚本提交到代码仓库。CI/CD工具如Jenkins、GitHub Actions、GitLab CI拉取代码后像运行普通自动化测试一样执行它们。在GitHub Actions中的配置示例.github/workflows/run-ui-tests.ymlname: UI Automation Tests on: schedule: - cron: 0 2 * * * # 每天凌晨2点运行 push: branches: [ main ] pull_request: branches: [ main ] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Set up Python uses: actions/setup-pythonv4 with: python-version: 3.10 - name: Install dependencies run: | pip install -r requirements.txt playwright install chromium playwright install-deps # 安装系统依赖 - name: Run UI Tests with Open Interpreter (Optional Generation) env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | # 可选步骤如果需要动态生成新测试可以在这里运行上面的test_generator_runner.py # python test_generator_runner.py # 主要步骤运行仓库中已生成的、稳定的测试套件 pytest tests/ --htmlreports/report.html --self-contained-html - name: Upload test report uses: actions/upload-artifactv3 if: always() # 即使测试失败也上传报告 with: name: ui-test-report path: reports/这种方案将不稳定的“生成”过程与稳定的“执行”过程分离。生成脚本可以放在另一个低频任务中由人工审核后合并到主分支。CI流水线只负责执行经过审核的、稳定的测试集保证了流水线的可靠性。5.3 方案三与测试管理平台集成你可以将Open Interpreter封装成一个服务与TestRail、Xray或Jira等测试管理工具集成。当在管理工具中创建一个新的测试用例用自然语言描述时通过webhook触发这个服务自动生成对应的自动化脚本草稿供测试工程师完善和确认。6. 避坑指南与常见问题排查在实际操作中我踩过不少坑。这里把最常见的问题和解决方案整理出来希望能帮你节省大量时间。6.1 问题一AI生成的元素定位器不稳定或找不到这是最高频的问题。页面细微变动就会导致脚本失败。根本原因AI倾向于使用它“看到”的文本或简单的CSS选择器这些在动态Web应用中非常脆弱。解决方案在提示词中强制要求使用稳健的定位器明确指令“请使用>