Claude-skills migrate

install
source · Clone the upstream repo
git clone https://github.com/alirezarezvani/claude-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/alirezarezvani/claude-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.gemini/skills/migrate" ~/.claude/skills/alirezarezvani-claude-skills-migrate && rm -rf "$T"
manifest: .gemini/skills/migrate/SKILL.md
source content

Migrate to Playwright

Interactive migration from Cypress or Selenium to Playwright with file-by-file conversion.

Input

$ARGUMENTS
can be:

  • "from cypress"
    — migrate Cypress test suite
  • "from selenium"
    — migrate Selenium/WebDriver tests
  • A file path: convert a specific test file
  • Empty: auto-detect source framework

Steps

1. Detect Source Framework

Use

Explore
subagent to scan:

  • cypress/
    directory or
    cypress.config.ts
    → Cypress
  • selenium
    ,
    webdriver
    in
    package.json
    deps → Selenium
  • .py
    test files with
    selenium
    imports → Selenium (Python)

2. Assess Migration Scope

Count files and categorize:

Migration Assessment:
- Total test files: X
- Cypress custom commands: Y
- Cypress fixtures: Z
- Estimated effort: [small|medium|large]
SizeFilesApproach
Small (1-10)Convert sequentiallyDirect conversion
Medium (11-30)Batch in groups of 5Use sub-agents
Large (31+)Use
/batch
Parallel conversion with
/batch

3. Set Up Playwright (If Not Present)

Run

/pw:init
first if Playwright isn't configured.

4. Convert Files

For each file, apply the appropriate mapping:

Cypress → Playwright

Load

cypress-mapping.md
for complete reference.

Key translations:

cy.visit(url)           → page.goto(url)
cy.get(selector)        → page.locator(selector) or 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 import or test data file

Cypress custom commands → Playwright fixtures or helper functions Cypress plugins → Playwright config or fixtures

before
/
beforeEach
test.beforeAll()
/
test.beforeEach()

Selenium → Playwright

Load

selenium-mapping.md
for complete reference.

Key translations:

driver.get(url)                    → page.goto(url)
driver.findElement(By.id('x'))     → page.locator('#x') or page.getByTestId('x')
driver.findElement(By.css('.x'))   → page.locator('.x') or 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. Upgrade Locators

During conversion, upgrade selectors to Playwright best practices:

  • #id
    getByTestId()
    or
    getByRole()
  • .class
    getByRole()
    or
    getByText()
  • [data-testid]
    getByTestId()
  • XPath → role-based locators

6. Convert Custom Commands / Utilities

  • Cypress custom commands → Playwright custom fixtures via
    test.extend()
  • Selenium page objects → Playwright page objects (keep structure, update API)
  • Shared helpers → TypeScript utility functions

7. Verify Each Converted File

After converting each file:

npx playwright test <converted-file> --reporter=list

Fix any compilation or runtime errors before moving to the next file.

8. Clean Up

After all files are converted:

  • Remove Cypress/Selenium dependencies from
    package.json
  • Remove old config files (
    cypress.config.ts
    , etc.)
  • Update CI workflow to use Playwright
  • Update README with new test commands

Ask user before deleting anything.

Output

  • Conversion summary: files converted, total tests migrated
  • Any tests that couldn't be auto-converted (manual intervention needed)
  • Updated CI config
  • Before/after comparison of test run results