自动化网页UI测试框架

selenium_mcp是一个基于Selenium的自动化网页UI测试框架,利用大型语言模型(LLMs)将自然语言测试场景转换为可执行的Selenium操作,无需编写代码或页面特定选择器。

  • by abdulsalam146
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 abdulsalam146/selenium_mcp

使用说明

硒-mcp

LLM驱动的、基于Selenium的自动化web UI测试框架,允许用户用普通的人类语言编写测试,而不是代码或页面特定的选择器。该系统使用大型语言模型(LLM)——默认情况下,该存储库演示了通过LangChain/LangGraph集成的基于Ollama的模型——来解释用户指令,在运行时将其映射到Selenium操作,并与网页交互,而不需要事先了解页面的实现细节。

核心思想:编写类似“Go to”的测试https://example.com,使用用户名X和密码Y登录,选择第一个产品并将其添加到购物车中”——该框架将这种自然语言转换为逐步的UI操作,解析实时DOM以查找元素,并使用Selenium执行它们。

重要提示:

  • selenium_mcp在运行时解析页面结构(DOM和可见元数据),以识别要与之交互的元素——用户不需要知道页面结构或实现页面对象模型(POM)。
  • 该项目是实验性的,目前并不专注于代币高效的LLM使用。
  • 该仓库公开了一个简单的“selenium-mcp”库,可以在其他应用程序中重用。
  • LLM集成示例通过LangChain/LangGraph使用Ollama。通过配置LangChain/LangGraph连接器,可以使用其他LLM提供程序。

目录

项目概述

selenium_mcp在selenium WebDriver之上提供了一个层,该层:

  • 接受人类语言测试场景。
  • 使用LLM(默认情况下为Ollama,通过LangChain/LangGraph)来计划一系列类似用户的UI操作(点击、表单填写、等待、导航)。
  • 在运行时解析当前页面结构(DOM和可见元数据),以识别UI元素并将操作映射到它们。
  • 在真实浏览器(本地或远程)上使用Selenium执行计划。
  • 捕获结构化结果、屏幕截图和日志以进行调试。

因为框架在运行时检查和解释页面,所以测试作者不需要创建或维护页面对象或选择器——LLM+运行时解析决定了在哪里单击、键入什么以及验证什么。

特性

  • 自然语言场景(不需要POM或选择器接线)。
  • 运行时DOM解析,在没有页面先验知识的情况下找到可操作的元素。
  • 默认情况下,LangChain/LangGraph编排使用Ollama模型(可插入其他提供者)。
  • 可配置的浏览器后端(本地Chrome/Firefox、远程Selenium Grid、BrowserStack/Sauce Labs)。
  • 简单、可重复使用的“selenium-mcp”库/API,用于嵌入其他工具。
  • 实验性:没有针对代币效率进行优化——目前的重点是能力和清晰度。

它是如何工作的(高级)

  1. 用户提供一个简单的语言场景(单个字符串或场景文件)。
  2. MCP服务器捕获当前页面的快照/元数据。
  3. Agent(LLM+LangChain/LangGraph)接收指令+页面上下文,并返回步骤计划(导航、通过可见文本查找元素、单击、填充字段、等待、验证)。
  4. MCP服务器使用Selenium执行每个步骤,使用DOM解析启发式方法来定位元素。
  5. 每次运行都会生成结果、屏幕截图和日志。

服务器/代理拆分将计划(代理)与确定性执行(服务器)分开。

提示和定义用户任务

用户任务和高级指令通过提示提供给代理。这些提示的内容决定了Agent如何解释场景以及生成的步骤计划中的详细程度。

  • 提示所在位置:

    • 默认情况下,代理从存储库的提示/config(或代理配置)中读取其指令模板。您还可以在运行时通过CLI标志或提示文件提供提示文本。
    • 如果要更改Agent行为,请更新提示模板(例如,类似promises/default_prompt.txt的文件),或在启动Agent时传递其他提示。
  • 提示中应包含哪些内容:

    • 明确的目标陈述(用户想要实现什么)。
    • 约束和安全规则(例如,不发送机密,不离开域)。
    • 预期的步骤粒度(高级步骤与非常明确的低级操作)。
    • 任何域提示(稳定标签、已知选择器或业务规则)。
  • 示例提示(简短): 您是一个代理,可以将人类语言测试场景转换为逐步的Selenium计划。使用提供的DOM快照定位可见元素。避免泄露日志中的秘密。更喜欢按可见文本、标签或可访问名称单击。如果不确定,请在步骤计划中描述不确定性。

  • 编辑提示:

    • 更新提示文件或修改代理的配置以更改行为。
    • 提示是定制代理如何对任务进行推理的主要机制——使用它们来调整详细程度、安全检查和执行首选项。

先决条件

  • Git
  • Python 3.8+(推荐)
  • 浏览器:Chrome、Firefox、Edge(本地安装或通过远程网格提供)
  • 匹配WebDriver二进制文件(chromedriver/geckodriver)或远程WebDriver端点
  • Ollama(如果使用默认Ollama模型)或通过LangChain/LangGraph配置的其他LLM提供程序
  • Docker(可选;建议在容器中运行浏览器)

快速启动

  1. 克隆仓库: 克隆https://github.com/abdulsalam146/selenium_mcp.git 镉硒mcp

  2. 安装依赖项(Python示例): python-m venv.venv source.ven/bin/activate pip安装-r要求.txt

  3. 准备LLM运行时:

    • 如果使用Ollama(示例中推荐),请在本地安装Ollama并提取您计划使用的模型。
    • 确保Ollama守护进程/模型正在运行,并且代理可以访问。

通过更改提供程序连接器,可以通过LangChain/LangGraph使用其他模型/提供程序。

分别运行MCP服务器和代理

该项目独立运行两个主要组件:

  • MCP服务器——负责Selenium浏览器控制、DOM快照和执行操作步骤。
  • Agent——负责用LLM解释自然语言场景并生成步骤计划。代理假定MCP服务器正在本地运行。

在单独的端子中启动组件:

  1. 启动MCP服务器: python硒mcp.py

    服务器将:

    • 启动或连接到Selenium会话,
    • 为代理公开本地端点以请求DOM快照并提交执行计划,
    • 默认情况下,将工件写入报告。
  2. 启动代理: python代理.py

笔记:

  • Agent假设MCP服务器正在本地运行;默认情况下,包含的代理连接到本地服务器——标准设置不需要URL参数。
  • 如果自定义主机/端口,请相应地更新代理。

编写自然语言场景

创建一个描述用户意图的纯文本或YAML场景。该框架理解常见的动词和UI意图,如“转到”、“单击”、“输入”、“提交”、“选择”、“等待”、“挑选产品”、“添加到购物车”等。

示例场景文件(测试/场景/login_add_product.txt): 首选https://example.com 使用用户名登录“user@example.com“和密码”P@ssw0rd!" 登录后,搜索“无线耳机” 从结果中选择第一个产品 将产品添加到购物车 验证购物车是否包含1件商品,产品标题是否包含“无线耳机”

因为selenium_mcp在运行时解析DOM,所以不需要提供选择器或页面对象;然而,添加稳定的提示(例如数据测试id)将提高关键测试的可靠性。

重要提示:不要在存储库中以纯文本存储机密。使用操作系统环境变量、操作系统密钥管理器或CI密钥存储来提供任何提供程序凭据。本自述文件无意建议不要将所有API密钥放入.env文件中-在生产使用中使用安全的密钥管理。

安全与隐私

  • 避免向公共LLM发送机密。使用秘密管理,必要时对敏感数据进行编辑。
  • 考虑在本地/私有基础设施上运行Ollama或其他模型以获取敏感数据。
  • 服务器/代理拆分通过集中执行和快照收集来减少意外的凭据泄漏。

限制和最佳实践

  • 实验性:行为可能会改变;预计偶尔会有非确定性的LLM解释。
  • 默认情况下,令牌效率不高:当前的实现优先考虑功能和清晰度,而不是最小化令牌。
  • 对于关键测试,提供稳定的提示(数据测试id属性)或将LLM驱动的测试与基于选择器的测试混合使用。
  • 在场景中使用明确的验证语句,以明确意图并减少歧义。

作为图书馆重复使用

selenium_mcp公开了一个简单的API/模块,该模块可以嵌入到其他应用程序中:

  • 将普通语言测试步骤转换为可执行的Selenium工作流。
  • 以编程方式使用DOM解析+LangChain/LangGraph编排管道。

有关嵌入模式和示例用法,请参阅examples/目录。

CI/持续集成

  • 将LLM提供程序凭据存储在CI密钥存储中,并配置运行器以安全地访问它们。
  • 确保浏览器或远程网格在CI环境中可用。
  • 作为CI作业的一部分启动MCP服务器(或将代理指向托管服务器),然后运行代理以执行场景。
  • 上传报告/作为CI工件进行检查。

贡献

  • 分叉并创建特征分支(feat/你的特征)。
  • 添加场景和测试,在不泄露秘密的情况下提高信心。
  • 如果要提高可靠性(令牌效率批处理、本地规划或稳定的提示工作流),请记录权衡和测试。

许可证

如果你想开源这个仓库,可以添加一个LICENSE文件(例如MIT)。

全部

  • 提高代币效率(批处理、本地规划)。
  • 添加更多示例场景和模板。
  • 添加对其他提供者的支持(例如Anthropic、Cohere等)。
  • 生成selenium代码以及代理为重用而不是重用LLM所采取的操作。

联系

  • 维护者:abdulsalam146(GitHub)
  • 问题:在此存储库中打开一个问题,以查找错误、功能请求或问题。