带有AI的Selenium MCP服务器
这 JAVA MAVEN测试项目 在Java中实现了一个Selenium主控制程序(MCP)服务器,该服务器通过使用语言模型(LLM)将自然语言测试步骤转换为Selenium WebDriver命令来执行浏览器自动化任务。服务器支持本地Ollama或远程LLM端点,并可通过属性文件进行配置。包含一个基于TestNG的客户端,用于发送测试提示和记录结果。
项目结构
- src/main/java/McpServer.java:处理HTTP请求、LLM交互和Selenium命令执行的主服务器类。
- src/main/java/LlmClient.java:处理与LLM(Ollama或远程API)的通信。
- src/test/java/硒测试客户端.java:TestNG客户端,将测试步骤发送到服务器并记录结果。
- config.properties:服务器设置(端口、浏览器、LLM端点)的配置文件。
- 硒操作特性:定义支持的Selenium操作及其所需参数。
- pom.xml文件:具有依赖关系的Maven配置。
应用流:
- 步骤1:客户端向MCP服务器输入自然语言测试步骤
- 步骤2:MCP服务器处理输入,LLM通过增强的PROMPT调用
- 步骤3:LLM用MCP命令响应
- 步骤4:MCP服务器使用响应并在浏览器上执行Selenium命令
先决条件
- Java:17或更晚
- 梅文:3.6.0或更高版本
- WebDriver:已安装ChromeDriver或FirefoxDriver(与您的浏览器版本匹配)并添加到PATH
- LLM:或者:
- 当地Ollama跑步http://localhost:11434(默认)使用类似llama3的模型 - 具有API密钥的远程LLM端点(例如,与OpenAI兼容的API)
- 浏览器:已安装Chrome或Firefox
- 测试NG:通过Maven包含,无需单独安装
设置
步骤1:
- 克隆项目:
- 克隆
- 镉硒mcp
安装依赖项:运行以下命令下载依赖项: 根项目上进行构建
配置服务器:编辑项目根目录中的config.properties以设置:
- 服务器端口:HTTP服务器端口(默认值:8080)
- 浏览器:浏览器类型(chrome或firefox,默认:chrome)
- llm端点:LLM API URL(默认值:http://localhost:11434Ollama)
- llm模型:LLM模型名称(默认值:llama3)
- llm.apiKey:远程LLM的API密钥(为Ollama保留为空)
config.properties示例:
- 服务器端口=8080
- 浏览器=chrome
- llm端点=http://localhost:11434
- llm.型号=骆驼3
- llm.apiKey=
步骤2:
- 使用启动服务器 McpServerJava
- 运行selenium客户端文件以查看测试执行情况 硒测试客户端Java
配置Selenium操作:selenium_operations.properties文件定义了支持的selenium命令及其参数。它包括start_browser、navigation、click_element等操作。如果需要,请修改此文件以添加或更改操作。 示例
- 硒操作属性:
- start_browser=无头浏览器
- 导航=url
- click_element=by、value、超时
…(其他操作)
设置Ollama(如果使用本地LLM):
安装Ollama(请参阅Ollama文档)。 启动Ollama服务器:
ollama serve
确保拉动指定型号(例如,llama3):拉动llama3
运行服务器
启动服务器:运行McpServer类:
mvn exec:java -Dexec.mainClass="McpServer"
或者,使用IDE运行McpServer.java。 服务器将在配置的端口上启动(默认:http://localhost:8080)并监听/执行POST请求。
验证服务器:检查控制台是否: MCP服务器在端口8080上启动
运行客户端
运行测试:执行TestNG客户端以发送测试步骤并生成结果: 运行测试
或者,使用TestNG插件在IDE中运行SeleniumTestClient.java。 客户端发送一个示例测试提示(例如,导航到https://example.com,单击链接并验证文本),并使用TestNG记录结果。
查看测试结果:TestNG在测试输出/目录(HTML和XML格式)中生成报告,其中包含通过/失败状态和详细信息。 SeleniumTestClient.java中的示例测试步骤:
输入自然语言测试步骤=“导航到en.wikipedia.org。搜索印度。截图”;
LLM输出示例 LLM必须将测试步骤转换为与selenium_operations.properties中的操作匹配的JSON命令数组。例子:
\[
{“type”:“start_browser”,“browser”:“chrome”,“headless”:“false”},
{“type”:“navigation”,“url”:https://example.com"},
{“type”:“click_element”,“by”:“xpath”,“value”:“//a\[text()=‘更多信息’\]”,“timeout”:“10000”},
{“type”:“get_element_text”,“by”:“xpath”,“value”:“//body”,“timeout”:“10000”},
{“type”:“close_session”}
\]
支持的Selenium操作: 服务器支持以下操作(定义于 硒操作特性):
- start_browser:启动浏览器会话(浏览器,无头)。
- 导航:导航到URL(URL)。
- find_element:查找元素(by、value、timeout)。
- click_element:单击元素(by、value、timeout)。
- send_keys:向元素发送文本(by、value、text、timeout)。
- get_element_text:检索元素文本(by、value、timeout)。
- 悬停:将鼠标悬停在元素上(by、value、timeout)。
- 拖放:将一个元素拖动到另一个元素(by、value、targetBy、targetValue、timeout)。
- 双重点击:双击元素(by、value、timeout)。
- 右_点击:右键单击元素(by、value、timeout)。
- 按键:模拟按键(key)。
- 上传文件:上传文件(by、value、filePath、timeout)。
- take_screenshot:以base64格式捕获屏幕截图(outputPath可选)。
- 关闭会话:关闭当前浏览器会话。
备注
LLM配置:确保LLM返回与selenium_operations.properties中的操作匹配的结构化JSON命令。如果需要,调整McpServer.java中的提示。 WebDriver兼容性:确保ChromeDriver或GeckoDriver与您的浏览器版本匹配。 文件上传:upload_File操作需要服务器可访问的有效文件路径。 截图:take_screenshot操作返回base64数据,以避免服务器端文件系统依赖。 错误处理:服务器捕获并报告响应中每个命令的错误。 扩展操作:向selenium_Operations.properties添加新操作,并根据需要更新McpServer.java中的executeCommand。
故障排除
服务器启动失败:请检查config.properties中的有效设置,并确保LLM终结点可访问。 WebDriver错误:验证ChromeDriver/GeckoDriver是否在PATH中并且与您的浏览器兼容。 LLM问题:确保Ollama正在运行,或者远程LLM端点和API密钥正确。 测试失败:检查测试输出中的TestNG报告/以获取详细的错误消息。
许可证 该项目根据MIT许可证获得许可。
