qa-automation-mcp-plugin
This server provides MCP tools for automated testing of enterprise web systems (SCM/MOM/WMS/ERP) using Playwright CDP to control a Chrome browser, including DOM analysis, interaction, VTable canvas table manipulation, recording, and exporting test artifacts.
Key Capabilities
Page Analysis & Navigation: Analyze current page DOM and iframes to extract interactive elements with locators, switch target browser tab by URL pattern, and wait for conditions (element, text, URL).
Interactive Actions: Perform clicks using various locators (CSS/XPath, semantic role, coordinates, including iframe chaining and VTable canvas), fill inputs, execute action chains with fallback and retry, probe dynamic layers (popups, dropdowns), download/upload files, and capture screenshots.
VTable Canvas Table: Connect to VTable instances, analyze headers and interactive icons, scan columns with multi-level headers, get row count and all records, read cell text (visual or raw), extract column values, get cell render info (colors/fonts), calculate cell center coordinates, scroll, select rows via checkbox clicks, drag to reorder columns, and resize columns.
Visual Understanding: Describe images using MiMo-V2.5 vision model (as a fallback for text-only models).
Test Recording & Export: Start recording sessions, execute actions while automatically recording optimal semantic locators, and export recorded test cases as JSON and Shadcn-style Excel reports.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@qa-automation-mcp-plugin Record a test case for the login flow and generate an Excel export"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
QA Automation Plugins (Claude Code 插件市场)
Claude Code 插件市场仓库(官方 marketplace 布局),托管企业级 Web 自动化测试插件:
市场清单:
.claude-plugin/marketplace.json(官方plugins/子目录 + 相对路径 source 布局)插件本体:
plugins/qa-automation-plugin/(含独立.claude-plugin/plugin.json清单)
目录结构
qa-automation-plugin/
├── .claude-plugin/
│ └── marketplace.json # 市场清单 (name/owner/plugins[].source)
├── plugins/
│ └── qa-automation-plugin/ # 插件根目录 (独立可分发)
│ ├── .claude-plugin/
│ │ └── plugin.json # 插件清单 (mcpServers + skills)
│ ├── skills/ # Agent Skills(设计 SOP + 场景复验,按需加载)
│ ├── src/qa_mcp/ # FastMCP 3.x 服务源码
│ ├── tests/ # 单元测试
│ ├── fastmcp.json # FastMCP 声明式服务配置
│ ├── pyproject.toml / uv.lock # Python 依赖声明与锁定
│ └── README.md # 插件详细文档
└── .mcp.json.example # 手动接入 MCP 客户端的工作区示例Related MCP server: OLTestStack
安装
Claude Code(CLI):
/plugin marketplace add hooplus1ce/qa-automation-plugin
/plugin install qa-automation-plugin@hoolinksClaude Desktop(桌面应用): Desktop 与 CLI 共享 marketplace 配置,分两步:
先在 Claude Code CLI 中执行一次
/plugin marketplace add hooplus1ce/qa-automation-plugin(或在受管环境中由管理员通过extraKnownMarketplaces预注册)。在桌面应用 Code 标签页的会话中,点击输入框旁 + → Plugins → Add plugin,在插件浏览器中找到 QA Automation Plugin 安装即可(可选 user/project/local 作用域)。
云会话不支持插件浏览器;需在仓库
.claude/settings.json的enabledPlugins中声明插件名。 无需 CLI 时也可走 ZIP 导入:见插件 README「方式一」。
本地开发调试
# 直接以插件目录加载 (跳过市场安装)
claude --plugin-dir ./plugins/qa-automation-plugin
# 校验市场清单与插件清单
claude plugin validate .
claude plugin validate plugins/qa-automation-plugin --strict
# 运行插件单元测试
uv run --directory plugins/qa-automation-plugin pytest详细功能、安装 SOP 与环境准备见 plugins/qa-automation-plugin/README.md。
Available Tools
24 toolsanalyze_current_pageA
分析当前 Chrome 页面。递归提取包括主文档和嵌套 iframe 内的所有可见交互元素并生成定位器。
Inputs: no named parameters. Returns: object
capture_screenshotA
截取当前页面截图:用 CDP 采集(不会卡在字体加载上),保存到 evidence_assets/ 并返回内联 PNG 图片(支持图片的客户端可直接查看)。filename 可指定输出文件名(默认时间戳,自动补 .png);full_page=True 截整页(含滚动区外内容),False(默认) 只截当前视口。返回文本摘要(文件路径/尺寸/字节数)+ 图片内容。用于视觉证据、页面状态留档、UI 断言前的实况确认。
Inputs: filename, full_page.
click_interactA
统一点击工具:by=css/xpath 传 selector(支持 iframe_selector 链式穿透),by=role 传 role+name(get_by_role 语义定位,适合 Portal 弹层),by=coordinate 传 x/y(coordinate_space=top 为顶层视口坐标,可点 VTable 内部)。click_type=single/double;detail=brief/full 控制观察输出体积。visualize 三态(None=跟随配置,默认关)。返回 visual_effects + observation(dynamic_layers/new_layers 浮层弹窗消息 + summary 摘要 + focus 域隔离 + navigation 的 URL/iframe 跳转对比)。
Inputs: x, y, by, name, +9 more. Returns: object
execute_action_chainA
批量动作链:一次调用顺序执行 click/fill/select_option/press 多个动作,最后统一观察一次并返回 observation(浮层/消息/跳转)。actions 每项 {action, by, selector, iframe_selector, value, click_type, input_method, clear_first, press_enter, key, description};stop_on_error=True 遇错即停(默认),False 收集 failed 继续。用于减少 Agent 往返。降级容错:每项可选 fallbacks: [{完整动作参数}] 配置备用定位,主定位失败时按序尝试;执行器还会自动附加兜底变体(antd 常驻 dropdown 的 li[title=...] 选项自动补/去 >> nth=N 变体、role↔css 互退),全部失败才中断,错误信息含已尝试的定位方案数。生成脚本时为易歧义动作(下拉选项点击、弹层按钮)配置 fallbacks 可显著提高整链成功率。
Inputs: actions (required), detail, visualize, stop_on_error. Returns: object
execute_and_recordB
利用 UI 组件适配器智能执行输入/点击等动作,并实时将最优高韧性语义定位步骤记录到用例中。
Inputs: action (required), description (required), element_css (required), value, +2 more. Returns: object
export_sessionA
结束录制会话,一键打包生成高质量的测试资产 (JSON) 及极致精美的 Shadcn 风格 Excel 用例。
Inputs: no named parameters. Returns: result
fill_inputA
文本框输入工具:by=css/xpath + selector(支持 iframe_selector 穿透);value 为空=清空。input_method=type(逐字键盘,触发键盘事件)/fill(原生填充);clear_first 默认清空;press_enter 可回车;detail=brief/full。visualize 三态(None=跟随配置,默认关)。返回 visual_effects + observation(浮层/消息 + summary + focus + 跳转)。
Inputs: by, value, detail, selector, +7 more. Returns: object
mimo_describe_imageA
仅当当前主模型为纯文本模型(如 DeepSeek-R1、DeepSeek-V3、GLM 纯文本版等)无法识别图片时使用的降级视觉识别工具。将本地图片路径、公网 URL 或对话框粘贴的图片发送给小米 MiMo-V2.5 模型解析并返回文本描述。若当前主模型本身具备原生多模态视觉能力(如 GPT-4o、Claude 3.5/3.7 Sonnet、Claude Opus 5、Gemini、Qwen2.5-VL、GLM-4V 等),绝对禁止调用本工具,必须由主模型直接看图。
Inputs: images, question, thinking, extract_pasted. Returns: object
probe_dynamic_layersA
探查当前页面或指定 iframe 中交互后出现的可见弹窗、消息气泡、下拉/日期/级联悬浮层,并返回内部文本、属性、HTML 和可交互元素。detail=brief(默认, 剪枝输出)|full(完整 html/文本)。
Inputs: detail, wait_ms, iframe_selector, poll_interval_ms. Returns: object
start_recordingC
初始化一个新的自动化测试用例录制会话。
Inputs: flow_name (required), description (required), system_under_test (required). Returns: result
switch_target_pageA
显式切换/重绑 MCP 操作目标标签页(按 URL 子串匹配)并锁定。默认机制:首次调用自动锁定一个标签页,后续操作固定作用于该页,不受新开/切换标签页影响;测试页被误关或需操作另一系统页面时用本工具重绑。返回新目标页 URL/标题。
Inputs: url_pattern (required). Returns: object
vtable_analyze_headersA
【场景图驱动】分析 vtable 列头与单元格内的交互图标组件:header_icons 为表头行真实渲染的交互图标(排序/筛选/下拉/冻结等,含顶层视口坐标可直接点击);cell_icons 为已渲染 body 单元格内的交互图标组件(行内按钮/链接/checkbox/开关等,columns 配置中不存在、只能从场景图获取);capabilities 汇总 sortable/filterable/interactiveCell。用于规划列头点击与行内交互。
Inputs: iframe_selector. Returns: result
vtable_drag_columnA
【真实鼠标拖拽】把 vtable 的 source 列拖到 target 列的前方(before)/后方(after)。完全复刻人工操作:先点击源列头中部使整列选中(VTable 拖拽启动前提),再按下鼠标分步拖拽到落点列松开。不使用任何实例 API 改列位置,仅用实例内部 API 读坐标与顺序做定位和验证;落点列由 VTable 原生语义自动计算(向右拖→目标列后方,向左拖→目标列前方)。source/target 支持列索引或字段名/列标题。返回拖拽前后列顺序、验证结果及 dragHeaderMode 等诊断信息;VTable 未开启列头拖拽(dragHeaderMode)或列级 dragHeader=false 时给出明确报错。
Inputs: source (required), target (required), position, iframe_selector. Returns: object
vtable_get_all_recordsA
一次性无损读取表格中所有的完整后台行记录对象 (JSON)。可用于整表断言和宏观数据检查,无需操作 DOM。
Inputs: iframe_selector. Returns: result
vtable_get_cell_centerA
读取单元格中心的【顶层视口坐标】viewportX/viewportY(经场景图 globalAABBBounds 精确计算,含 iframe 与容器偏移),可直接作为 click_interact(by="coordinate", coordinate_space="top") 的点击坐标。col_field 支持列索引或字段名/列标题,row_index 为纯数据行号(0 为第一行)。
Inputs: col_field (required), row_index (required), iframe_selector. Returns: object
vtable_get_cell_render_infoA
读取某个单元格的场景图渲染详情:视觉文本、文字颜色、单元格背景色、边框色、字体大小及文本/背景节点(detail="full" 时含全部节点)。col_field 支持列索引或字段名/列标题,row_index 为纯数据行号(0 为第一行)。用于断言单元格的展示样式(标签色、高亮等)。
Inputs: col_field (required), row_index (required), detail, iframe_selector. Returns: object
vtable_get_cell_textA
读取某个具体单元格的值。row_index 为纯数据行号 (0为第一行),col_field 支持字段名或列标题。visual=True(默认) 读取场景图渲染层文本,与界面显示完全一致——重要:VTable 排序/筛选发生在渲染层,数据源 records 不重排,排序状态下必须用渲染层才能读到界面真实顺序;visual=False 读取数据源 records 原始值(忽略排序/筛选)。渲染视口外的行需先滚动。
Inputs: col_field (required), row_index (required), visual, iframe_selector.
vtable_get_column_valuesA
按中文列标题读取该列所有单元格的值。titles 为列标题数组(如 ["商品名称","商品编码"]);raw=false 读取场景图渲染后的视觉文本(与界面显示一致),raw=true 读取原始字段值(如数字码/状态码)。返回每列值列表及缺失列。
Inputs: titles (required), raw, iframe_selector. Returns: object
vtable_get_row_countA
读取当前 VTable 表格有多少行纯数据。直接通过读取内部记录集合长度,不受屏幕滚动截断影响。
Inputs: iframe_selector. Returns: result
vtable_refresh_instanceA
强制连接浏览器,在目标 iframe 中寻址并刷新最新 vtable 实例至 window._vtable。通常作为其他 VTable 操作的前置条件。
Inputs: iframe_selector. Returns: object
vtable_scan_columnsB
【推荐】扫描 VTable 全部列(含多级表头):返回每列标题、body 行为分类(checkbox/button/文本等),以及【表头图标的顶层视口坐标 viewportX/viewportY】(经场景图 scenegraph 精确计算)。坐标可直接传给 click_interact(by="coordinate", coordinate_space="top") 点击,无需叠加偏移。用于规划列头点击(排序/筛选/下拉图标)与列交互。
Inputs: max_col, iframe_selector. Returns: result
vtable_scroll_toA
滚动 VTable 到目标位置(等价于拖动横/纵向滚动条滑块,直接调用实例 API scrollToCol/scrollToRow/scrollToCell/setScrollLeft/setScrollTop,比真实鼠标拖拽滚动条更稳定)。四种用法按优先级:1) col_field+row_index 滚动到指定单元格;2) 仅 col_field 横向滚动到该列;3) 仅 row_index 纵向滚动到该行;4) scroll_left/scroll_top 直接设置滚动偏移。col_field 支持列索引(int)或字段名/列标题(str)。verify=True(默认) 滚动后自动校验目标是否已进入可视区,返回最新 scrollLeft/scrollTop 及单元格可见性。滚动到目标后应配合 vtable_get_cell_center 获取最新坐标再点击。
Inputs: verify, col_field, row_index, scroll_top, +2 more. Returns: object
vtable_select_rowsA
勾选/取消勾选 VTable 表格中的行。VTable 是 canvas 渲染,DOM 中无复选框,本工具在内部一次性完成实例刷新、checkbox 列定位、目标行坐标计算(iframe 相对顶层偏移 + canvas 相对 iframe 偏移合成)并发送真实鼠标点击,返回勾选前后变化。row_indexes 为 0 起始的纯数据行索引列表;action 可选 check(确保勾选,默认,幂等)/uncheck(确保取消)/toggle(逐行切换)。点击后自动观察并返回 observation:dynamic_layers/new_layers(浮层与消息弹窗)、navigation.url_changed(tab 页跳转)、navigation.frames_changed(iframe 跳转)。
Inputs: row_indexes (required), action, iframe_selector. Returns: object
wait_for_conditionA
等待页面条件成立(轮询),超时返回最后一次状态快照、不抛错。condition:element_visible(selector 可见,默认)/element_hidden(selector 不可见或不存在)/element_has_text(selector 可见文本包含 expected_text,exact=True 精确相等)/text_present(目标 iframe 或全部 frame 页面文本出现 expected_text)/url_contains(URL 包含 expected_text)。典型用法:提交表单后 wait_for_condition(condition='text_present', expected_text='新增成功', timeout_ms=10000) 等成功消息出现,再断言收尾。
Inputs: exact, selector, condition, timeout_ms, +3 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 24 tools
Most tools have clearly distinct purposes, especially the vtable_* family which is subdivided by action (get, scan, scroll, select, drag). A few pairs like vtable_analyze_headers and vtable_scan_columns overlap in analyzing headers, but descriptions clarify their different outputs. Overall, agents can tell tools apart with careful reading.
Tools generally follow a verb_noun pattern in snake_case (e.g., click_interact, fill_input, capture_screenshot). The vtable_* prefix creates a consistent subsystem, though 'mimo_describe_image' breaks the pattern by leading with a noun and 'execute_and_record' uses a conjunction while 'execute_action_chain' uses a modifier. Still, the overall pattern is predictable.
With 24 tools, this is on the heavy side, but the breadth reflects the complexity of QA automation including full VTable support. Each tool serves a distinct function, and the count is justified by the domain, though it demands careful selection.
The server covers the full recording lifecycle (start, execute, export), generic interaction (click, fill, chain, wait), page analysis, and a deep VTable toolkit. Minor gaps include no dedicated hover, keyboard shortcut, or element state assertion, but these are workarounds via execute_action_chain and wait_for_condition.
Maintenance
Related MCP Connectors
Official Browserless MCP server: browser automation, scraping, screenshots and PDFs for AI agents.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Web scraping, browser automation, screenshots and AI data extraction for AI agents via MCP.
MCP server for Mint — AI-powered QA that runs your app in a real browser on every PR.
Related MCP Servers
- AlicenseBqualityDmaintenanceA universal browser automation MCP server using Playwright, enabling programmatic control of Chrome with 63 tools for navigation, interaction, media control, and CDP-based diagnostics.6311 npm3MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that enables AI agents to automate browser testing via Chromium, providing tools for navigation, interaction, and inspection.-
- AlicenseAqualityDmaintenanceSelf-hosted MCP server for AI browser automation. Connects to your own Chromium instance via CDP, providing tools for browser control, navigation, interaction, and content extraction.191MIT
- AlicenseNot gradedqualityCmaintenanceUnified MCP server for browser automation (Playwright + CDP + CLI) and bookmark management across Chrome, Firefox, Edge, and Brave, including cross-browser sync, deduplication, and a React dashboard.1MIT