
Migrate
Convert Cypress or Selenium test suites to Playwright with detected scope, batching strategy, and file-by-file mappings.
Install
npx skills add https://github.com/alirezarezvani/claude-skills --skill migrateWhat is this skill?
- Auto-detects Cypress, Selenium (Node), or Selenium (Python) from repo layout and dependencies
- Migration assessment reports file counts, custom commands, fixtures, and small/medium/large effort
- Large suites (31+ files) recommend parallel /batch conversion; medium uses groups of five
- Runs Playwright init (/pw:init) when Playwright is not yet configured
- File-by-file conversion using cypress-mapping and selenium mapping references
Adoption & trust: 1.5k installs on skills.sh; 17.5k GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Agent Browservercel-labs/open-agents
Tddmattpocock/skills
Use My Browserxixu-me/skills
Test Driven Developmentobra/superpowers
Verification Before Completionobra/superpowers
Webapp Testinganthropics/skills
Journey fit
Primary fit
Test framework migration is canonical on Ship → testing when you are hardening delivery pipelines and E2E coverage before or during launch. The skill is entirely about replacing legacy browser automation with Playwright, not building product features or marketing.
Common Questions / FAQ
Is Migrate safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Migrate
# 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] ``` | Size | Files | Approach | |---|---|---| | Small (1-10) | Convert sequentially | Direct conversion | | Medium (11-30) | Batch in groups of 5 | Use 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: ```bash 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