Convert Cypress tests to and from Eggplant (SenseTalk), OpenTest.AI, Testers.AI Recorder, Testers.AI Dynamic, Selenium, and Playwright. Handles Cypress JavaScript/TypeScript (`cy.visit`, `cy.get`, `.should`, `.click`, `.type`, custom commands, intercepts) and common add-ons (Cypress Testing Library, cypress-real-events, @cypress/grep). Use whenever the user wants to migrate a Cypress suite, translate a single spec, or round-trip Cypress through another framework. MANDATORY TRIGGERS — "convert Cypress", "Cypress to Playwright", "Cypress to Selenium", "Cypress to Eggplant", "migrate Cypress", "translate cypress test", "port Cypress", "Cypress → OpenTest.AI", "Cypress to Testers.AI", or any mention of Cypress alongside any of the supported targets.
설치
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
Convert Cypress tests to and from Eggplant (SenseTalk), OpenTest.AI, Testers.AI Recorder, Testers.AI Dynamic, Selenium, and Playwright. Handles Cypress JavaScript/TypeScript (`cy.visit`, `cy.get`, `.should`, `.click`, `.type`, custom commands, intercepts) and common add-ons (Cypress Testing Library, cypress-real-events, @cypress/grep). Use whenever the user wants to migrate a Cypress suite, translate a single spec, or round-trip Cypress through another framework. MANDATORY TRIGGERS — "convert Cypress", "Cypress to Playwright", "Cypress to Selenium", "Cypress to Eggplant", "migrate Cypress", "translate cypress test", "port Cypress", "Cypress → OpenTest.AI", "Cypress to Testers.AI", or any mention of Cypress alongside any of the supported targets.
Converts tests from Cypress to any supported target, and to Cypress from another framework. Defers orchestration, target semantics, and cross-framework rules to the open-testing-convert master skill.
When to use
Trigger when:
The user references a Cypress project, spec file, or snippet and asks to migrate or translate it.
The user asks to convert to Cypress from Selenium, Playwright, a Testers.AI recording, or a natural-language format (OpenTest.AI, Testers.AI Dynamic).
The user uploads a .cy.js, .cy.ts, or legacy integration/**/*.spec.js file containing cy.visit, cy.get, describe(...) with cy. calls, cypress.config.ts / cypress.config.js, or cypress/support/e2e.{js,ts} / cypress/support/commands.{js,ts}.
cypress.json (legacy) or cypress.config.* is present.
How to use
Read the master orchestrator first. Open ../open-testing-convert/SKILL.md and follow its step order (detect source → detect target → resolve language → delegate to this skill → read target primer → validate output).
Confirm target and language. The master's language-policy.md governs language choice (default: preserve source language unless the user requests otherwise). Cypress is JS/TS only; for non-JS targets the language flips.
For Selenium reverse: consult ../open-testing-convert-selenium/reference/source-profile.md.
For Playwright reverse: consult ../open-testing-convert-playwright/reference/source-profile.md.
Read this skill's reference files:
reference/source-profile.md — what Cypress tests look like.
reference/extraction.md — how to extract canonical intent from Cypress code.
reference/mappings.md — per-target translation tables and worked examples.
Read shared references as needed:open-testing-convert/reference/shared/{locator-mapping,wait-strategies,assertion-mapping,lifecycle-mapping}.md.
Emit the converted test(s) according to the target primer's Emission Checklist. Produce a preamble summarising: source file, config version, target, language choice, any TODOs.
Cypress component testing (cy.mount) — emit with preamble flag; component scope does not map cleanly to Selenium/Playwright E2E or natural-language targets.
Cucumber-over-Cypress (@badeball/cypress-cucumber-preprocessor, or legacy cypress-cucumber-preprocessor) — use open-testing-convert-cucumber, which invokes this skill for the step-implementation layer.
Quick reference: Cypress verbs and their canonical conversions
Cypress
Intent
Conversion hub
cy.visit(url)
navigate
shared/wait-strategies.md §Navigation
cy.get(sel).click()
click
shared/locator-mapping.md
cy.get(sel).type(x)
text input
shared/locator-mapping.md
cy.contains('X')
locate by visible text
shared/locator-mapping.md
cy.findByRole('button', {name:'X'})
Testing Library locator
shared/locator-mapping.md
.should('be.visible')
assertion (auto-retries)
shared/assertion-mapping.md
cy.intercept(...).as('x'); cy.wait('@x')
network synchronisation
shared/wait-strategies.md §Cypress
beforeEach(() => ...)
lifecycle
shared/lifecycle-mapping.md
See reference/mappings.md for the full per-target cookbook.