Token导航 LogoToken导航

MCP Server · 运维云端

Pw MCP Server

一个基于Playwright和TypeScript的自动化测试框架,针对OrangeHRM系统进行UI和API测试,支持页面对象模型和请求处理器的流畅API调用。

stdio官方级别未说明来源级核验工具 0playwright
测试自动化TypeScriptAPI测试

快速开始

作者 / 组织
chuongnguyen291088
提供方
chuongnguyen291088
运行时
Node.js

工具数量

0

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

0

仓库热度

收录来源

1 个

MCP World

选型结论

Pw MCP Server 属于运维云端类 MCP Server,公开资料标注 0 个工具,通过stdio 本地进程接入,客户端适配情况以官方文档为准,有可以直接复制的安装命令;接入前要先准备 会话凭据。

分类

运维云端

传输方式

stdio

认证方式

会话凭据

部署方式

公开资料未说明

安装与配置

安装命令

npx playwright install --with-deps

公开命令不是通用的启动方式,拼不出可靠配置示例;请在客户端 MCP 配置里按官方文档填写 command 和 args。

上手步骤

  1. 1

    准备运行环境

    stdio 服务在本地起进程,需要先装好 Node.js,再按安装命令拉取依赖。

  2. 2

    安装服务

    复制下面的安装命令执行;命令里带占位符的位置换成自己的密钥或路径。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 0 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

详细介绍

剧作家测试自动化框架(OrangeHRM)

Playwright+TypeScript测试自动化框架 OrangeHRM演示.它结合了UI测试(页面对象模型和可重用元素包装器)和API测试(fluent RequestHandler +Zod验证了有效载荷和响应),并公开了用于AI辅助测试开发的Playwright MCP服务器。

特性

  • 具有共享的页面对象模型 BasePage (isOnPage() 通过waitFor/try catch)和a PageManager 入口点
  • 可重用的UI元素包装器(Button, Textbox, DropdownList, Checkbox, Table, Datepicker, Dialog, Menu, Tab, Toggle, Slider, FileUpload, Link, Label, RadioButton)
  • API层 RequestHandler (路径/参数/头文件/正文/表单→ GET/POST/PUT/DELETE)以及每次通话记录选项
  • Zod模式 对于请求DTO和响应实体,有效载荷在进出过程中都会被解析/验证
  • 基于Faker的测试数据工厂(prepareNewEmployeePayload, prepareNewUserPayload, prepareContactDetailsPayload)部分覆盖
  • 环境感知配置(TEST_ENV=QA|PROD|dev)via properties.config.ts + .env
  • Pino结构化日志记录(src/utils/logger.ts)以及内存中 APILogger 将最近的请求/响应上下文附加到失败断言的环形缓冲区
  • 诱惑和HTML记者;保留故障视频/痕迹;上的完整页面截图
  • 用于AI辅助创作的剧作家MCP服务器集成

先决条件

  • Node.js 18+和npm
  • Git

安装

git clone https://github.com/chuongnguyen291088/pw-mcp-server.git
cd pw-mcp-server
npm ci
npx playwright install --with-deps

环境配置

集 TEST_ENV 到 QA, PROD,或保持未设置(默认为 dev). properties.config.ts 将所选环境映射到从中读取的基本URL和凭据 .env:

QA_ADMIN_USERNAME=
QA_ADMIN_PASSWORD=
PROD_ADMIN_USERNAME=
PROD_ADMIN_PASSWORD=
DEV_ADMIN_USERNAME=
DEV_ADMIN_PASSWORD=

目前,所有三个环境都指向 https://opensource-demo.orangehrmlive.com 对两者 base_url 和 api_host.

项目结构

├── page-objects/ (legacy — active page objects live under src/ui/page-objects)
├── src/
│   ├── api/                     # VERB_resource.ts API classes (GET_users, POST_new_employee, ...)
│   ├── baseEntities.ts          # Base class injecting RequestHandler
│   ├── controllers/             # Higher-level orchestrators (UserManagementController)
│   ├── entities/
│   │   ├── factories/           # Faker + Zod payload builders
│   │   │   ├── ContactDetails.factory.ts
│   │   │   ├── NewEmployee.factory.ts
│   │   │   └── NewUser.factory.ts
│   │   └── schemas/
│   │       ├── requests/        # Zod request schemas
│   │       └── responses/       # Zod response schemas (NewEmployee, NewUser, UserList)
│   ├── helpers/                 # TestDataFactory scaffolding
│   ├── requestDto/              # Legacy DTO interfaces (being replaced by Zod schemas)
│   ├── ui/
│   │   ├── page-elements/       # Reusable element wrappers + BaseElement
│   │   └── page-objects/        # BasePage, PageManager, and per-screen classes
│   └── utils/                   # logger.ts, apiLogger.ts, requestHandler.ts
├── tests/
│   ├── 01_authorization.spec.ts # API flow using UserManagementController + Zod-validated responses
│   ├── 01_navigation.spec.ts    # UI navigation coverage via PageManager
│   ├── orangeHrm.spec.ts        # Standalone browser tests (no auth dependency)
│   ├── seed.spec.ts             # Scratch file for MCP/exploratory work
│   └── setup/
│       ├── authentication.setup.ts             # CSRF-aware login → .auth/auth.json
│       └── talk_first_authentication.setup.ts
├── playwright.config.ts
├── properties.config.ts
├── test-options.ts              # Custom fixtures: api, pageManager, pre-navigated page
├── tsconfig.json                # Path aliases: @api/*, @controller/*, @schemas/*, @factories/*, ...
└── package.json

可用脚本

# Runs the three main spec files against the QA env
npm test

# Standalone Talk First scenario
npm run talk-first-test

这 npm test 脚本定义为:

npx cross-env TEST_ENV=qa playwright test tests/01_authorization.spec.ts tests/01_navigation.spec.ts tests/orangeHrm.spec.ts

有用的一次性命令

# Run a specific spec
npx cross-env TEST_ENV=QA npx playwright test tests/01_authorization.spec.ts

# Run a specific Playwright project
npx cross-env TEST_ENV=QA npx playwright test --project="Orange HRM Execution"

# Run headed
npx cross-env TEST_ENV=QA npx playwright test --headed

# Open the last HTML report
npx playwright show-report

# Allure (results are written to ./allure-results)
npx allure generate allure-results --clean -o allure-report
npx allure open allure-report

# Start the Playwright MCP server for AI-assisted authoring
npx playwright run-test-mcp-server

剧作家项目(playwright.config.ts)

  • Orange HRM Setup --跑步 tests/setup/authentication.setup.ts,执行CSRF感知登录,并将会话保存到 .auth/auth.json
  • Orange HRM Execution --取决于设置项目;火柴 **/01_**.spec.ts 并重用存储的身份验证状态
  • orangeHrm --独立浏览器测试 **/orangeHrm.spec.ts;无身份验证依赖关系
  • Talk Fist Setup / Talk First Execution --Talk First场景的并行设置+执行对,将状态存储在 .auth/talkFirstAuth.json

全球 use 选项: baseURL 从 properties.config.ts,默认无头,1920×1080视口,打开全页截图,失败时保留视频,失败时保持跟踪,90秒测试超时。

定制夹具(test-options.ts)

始终从以下位置导入 @test-options (不是 @playwright/test)因此,测试会选择自定义夹具:

import { test, expect } from '@test-options';

外露固定装置:

  • api --预制 RequestHandler 由A支持 APILogger 环形缓冲区
  • pageManager — PageManager 实例,已导航到仪表板
  • page --覆盖以导航到仪表板,并在每次测试前等待仪表板标题

API层

堆栈分为四个关注点:

  1. Zod请求模式 (src/entities/schemas/requests/)--定义出站有效载荷的形状/约束
  2. 工厂 (src/entities/factories/)--使用Faker默认值构建有效载荷 Partial 重写,在返回之前通过模式验证
  3. API类 (src/api/VERB_resource.ts)--延伸 BaseEntities;每个暴露一个 send() 驱动方法 this.api (the RequestHandler)
  4. 控制器 (src/controllers/)-将多个API类编排成更高级别的流。 UserManagementController 组建创建员工→ 创建用户→ 更新联系人详细信息并通过以下方式解析用户列表 UserListResponseSchema

RequestHandler (src/utils/requestHandler.ts)

周围有流利的建设者 APIRequestContext:

await api
    .path('/web/index.php/api/v2/pim/employees')
    .body(payload)
    .POST(200, { logRequestBody: true, logResponseBody: true });

await api
    .path('/web/index.php/api/v2/admin/users')
    .params({ limit: '50' })
    .GET(200);
  • 链式方法: .url(), .path(), .params(), .headers(), .body(), .form()
  • 终端方式: .GET(expectedStatus), .POST(expectedStatus), .PUT(expectedStatus), .DELETE(expectedStatus)
  • 每种终端方法都接受 RequestOptions: logRequestHeaders, logRequestBody, logResponseBody
  • 如果状态代码不匹配,处理程序将抛出来自的最后50个日志条目 APILogger 为了上下文
  • 内部状态重置(cleanUp())每一个请求之后,只有一个 api 夹具可以在通话中重复使用
  • POST/PUT/PATCH 自动切换 multipart (FormData), form (application/x-www-form-urlencoded),以及JSON data

响应验证

响应通过Zod模式解析 src/entities/schemas/responses/ (NewEmployee, NewUser, UserList). z.infer 提供类型化访问,而无需维护并行手写接口——这是遗留问题 src/entities/*.ts 为了支持这一点,接口已被删除。

添加新的API终结点

  1. 在中添加Zod模式 src/entities/schemas/requests/YourRequest.schema.ts
  2. 在中添加Zod模式 src/entities/schemas/responses/YourResponse.schema.ts
  3. 在中添加工厂 src/entities/factories/YourThing.factory.ts 使用Faker+ Schema.parse({ ...defaults, ...overrides })
  4. 创建 src/api/VERB_resource.ts 延伸 BaseEntities 带着一个 send() 方法
  5. 将操作暴露在 UserManagementController (或新的控制器)并通过响应模式解析响应

页面对象模型

  • BasePage (src/ui/page-objects/BasePage.ts)--抽象基础暴露 isOnPage() (共享waitFor/try catch针对受保护的 pageHeading 定位器), expandMenu() 对于折叠的侧边栏,以及 `navigateTo

Page()` 每个OrangeHRM区域的助手

  • 每屏类扩展 BasePage 仅添加特定于屏幕的定位器/操作
  • BasePageIndexes.ts 重新导出每个页面类——始终从桶中导入,而不是单个文件
  • PageManager 将所有页面连接在一起;测试通过以下方式访问它们 pm.onDashboardPage(), pm.onPIMPage(), pm.onAdminPage()等等。
  • 元素交互建立在中的包装器上 src/ui/page-elements/,所有这些都延伸 BaseElement (使用Pino记录器进行结构化错误输出)

日志记录

  • src/utils/logger.ts --Pino(印刷精美,彩色)用于一般控制台输出
  • src/utils/apiLogger.ts — APILogger 维护请求/响应数据的环形缓冲区(最多50个条目)。默认情况下,标头和正文会被编辑,只有在每次调用时明确启用时才会被记录 RequestOptions当断言失败时,缓冲区会出现在错误消息中。

测试数据

使用 @faker-js/faker 通过工厂 src/entities/factories/示例:

import { prepareNewEmployeePayload } from '@entities/factories/NewEmployee.factory';

const employee = prepareNewEmployeePayload({ firstName: 'Alice' });

工厂填充Faker中的剩余字段,并通过匹配的Zod请求模式解析结果,因此无效的覆盖很快就会失败。

报告

  • 诱惑结果→ allure-results/,生成报告→ allure-report/
  • 剧作家HTML报告→ playwright-report/ (打开 npx playwright show-report)
  • 故障时保留痕迹和视频 test-results/

贡献

  1. 创建要素分支
  2. 对于任何新的API工作,请遵循现有的Zod-schema-first模式
  3. 重用 BasePage /元素包装器,而不是滚动新的定位器
  4. 打开拉取请求

许可证

国际学生中心

工具与能力

工具数量

0

资源数量

0

提示词数量

0

能力标签

测试自动化TypeScript本地部署UI测试API测试页面对象模型请求处理器

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

看服务状态

查询容器、日志和监控指标,定位异常。

执行部署变更

在权限范围内触发发布、回滚和环境切换。

核对资源用量

汇总用量,找出闲置和超额的部分。

选择建议

值得选的地方

  • 只提供 0 个工具,职责集中,接入后不容易误操作。
  • 有现成的安装命令,不用自己找入口,照着跑就能起服务。
  • 公开说明写得比较完整,接入前能看清能力边界。

先想清楚的地方

  • stdio 方式要求本地装好 Node.js,换机器要重新装一遍。
  • 需要自备会话凭据,没有凭据没法直接试。
  • 第三方目录整理,版本更新和行为细节以官方仓库为准。

更适合

  • 需要在运维云端场景里让模型直接调用外部能力的人。
  • 想先快速试一下、能接受在本地跑服务的人。

不太适合

  • 完全不想在本地装环境的人。
  • 暂时拿不到会话凭据的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
Pw MCP Server

MCP World · 本页

0stdio有1 个2026-05-17
Ui Tars Desktop 8a825770

MCP World

0stdio有1 个2026-05-17
Elie222 MCP

MCP World

0未说明未标注1 个2026-05-17
Arizeai Phoenix MCP

MCP World

0stdio有3 个2026-05-17
Unity MCP 87ee506e

MCP World

42HTTP有2 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

Pw MCP Server 怎么安装?

公开资料给出的安装命令是 npx playwright install --with-deps,运行环境为 Node.js。装完后按客户端要求写进 MCP 配置,重启客户端生效。

Pw MCP Server 怎么在 Claude Desktop、Cursor 里配置?

它是stdio 本地进程,客户端配置里要写启动命令和参数,运行环境是 Node.js;保存后完全退出客户端再打开,配置才会生效。

Pw MCP Server 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

Pw MCP Server 需要 API Key 吗?

公开资料标注的认证方式是会话凭据,也就是要先拿到凭据才能连上;凭据只填在自己本地的配置里,不要写进公开仓库。

Pw MCP Server 支持哪些客户端?

公开资料没有标注具体客户端;能配置本地 MCP 命令的客户端都能接,配置方式参照官方文档。

来源信息

继续浏览同类 MCP