Skip to main content
Glama

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@hoolinks

Claude Desktop(桌面应用): Desktop 与 CLI 共享 marketplace 配置,分两步:

  1. 先在 Claude Code CLI 中执行一次 /plugin marketplace add hooplus1ce/qa-automation-plugin(或在受管环境中由管理员通过 extraKnownMarketplaces 预注册)。

  2. 在桌面应用 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 tools
analyze_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

    A3.7/5.0

    Scored across 24 tools

    Disambiguation4/5

    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.

    Naming Consistency4/5

    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.

    Tool Count3/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers