🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx skills add https://skills.sh/alirezarezvani/claude-skills/migrate

💡 提示:需要 Node.js 和 NPM

迁移到 Playwright

从 Cypress 或 Selenium 交互式迁移到 Playwright,逐个文件进行转换。

输入

$ARGUMENTS 可以是:

  • "from cypress" — 迁移 Cypress 测试套件
  • "from selenium" — 迁移 Selenium/WebDriver 测试
  • 文件路径:转换特定的测试文件
  • 空:自动检测源框架

步骤

1. 检测源框架

使用 Explore 子智能体进行扫描:

  • cypress/ 目录或 cypress.config.ts → Cypress
  • package.json 依赖中有 seleniumwebdriver → Selenium
  • .py 测试文件包含 selenium 导入 → Selenium (Python)

2. 评估迁移范围

统计文件数量并进行分类:

迁移评估:
- 测试文件总数:X
- Cypress 自定义命令:Y
- Cypress 测试数据:Z
- 预估工作量:[小|中|大]
规模 文件数 方法
小 (1-10) 按顺序转换 直接转换
中 (11-30) 每 5 个一批 使用子智能体
大 (31+) 使用 /batch 使用 /batch 并行转换

3. 设置 Playwright(如果尚未配置)

如果 Playwright 尚未配置,请先运行 /pw:init

4. 转换文件

对于每个文件,应用相应的映射:

Cypress → Playwright

加载 cypress-mapping.md 获取完整参考。

关键转换:

cy.visit(url)           → page.goto(url)
cy.get(selector)        → page.locator(selector) 或 page.getByRole(...)
cy.contains(text)       → page.getByText(text)
cy.find(selector)       → locator.locator(selector)
cy.click()              → locator.click()
cy.type(text)           → locator.fill(text)
cy.should('be.visible') → expect(locator).toBeVisible()
cy.should('have.text')  → expect(locator).toHaveText(text)
cy.intercept()          → page.route()
cy.wait('@alias')       → page.waitForResponse()
cy.fixture()            → JSON 导入或测试数据文件

Cypress 自定义命令 → Playwright 测试夹具或辅助函数
Cypress 插件 → Playwright 配置或测试夹具
before/beforeEachtest.beforeAll() / test.beforeEach()

Selenium → Playwright

加载 selenium-mapping.md 获取完整参考。

关键转换:

driver.get(url)                    → page.goto(url)
driver.findElement(By.id('x'))     → page.locator('#x') 或 page.getByTestId('x')
driver.findElement(By.css('.x'))   → page.locator('.x') 或 page.getByRole(...)
element.click()                    → locator.click()
element.sendKeys(text)             → locator.fill(text)
element.getText()                  → locator.textContent()
WebDriverWait + ExpectedConditions → expect(locator).toBeVisible()
driver.switchTo().frame()          → page.frameLocator()
Actions                            → locator.hover(), locator.dragTo()

5. 升级定位器

在转换过程中,将选择器升级为 Playwright 最佳实践:

  • #idgetByTestId()getByRole()
  • .classgetByRole()getByText()
  • [data-testid]getByTestId()
  • XPath → 基于角色的定位器

6. 转换自定义命令 / 工具函数

  • Cypress 自定义命令 → 通过 test.extend() 创建 Playwright 自定义测试夹具
  • Selenium 页面对象 → Playwright 页面对象(保留结构,更新 API)
  • 共享辅助函数 → TypeScript 工具函数

7. 验证每个转换后的文件

转换每个文件后:

npx playwright test <转换后的文件> --reporter=list

在继续下一个文件之前,修复所有编译或运行时错误。

8. 清理

所有文件转换完成后:

  • package.json 中移除 Cypress/Selenium 依赖
  • 删除旧的配置文件(cypress.config.ts 等)
  • 更新 CI 工作流以使用 Playwright
  • 更新 README 中的新测试命令

在删除任何内容之前询问用户。

输出

  • 转换摘要:转换的文件数、迁移的测试总数
  • 任何无法自动转换的测试(需要手动介入)
  • 更新后的 CI 配置
  • 测试运行结果的前后对比

📄 原始文档

完整文档(英文):

https://skills.sh/alirezarezvani/claude-skills/migrate

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。