Convert Selenium WebDriver tests to and from Eggplant (SenseTalk), OpenTest.AI, Testers.AI Recorder, Testers.AI Dynamic, Playwright, and Cypress. Handles Selenium Java (JUnit/TestNG), Python (pytest/unittest), JavaScript (Mocha/Jest), C# (NUnit/MSTest/xUnit), and Ruby. Use whenever the user wants to migrate a Selenium test suite, translate a single Selenium script, or round-trip Selenium through another framework. MANDATORY TRIGGERS — "convert Selenium", "Selenium to Playwright", "Selenium to Cypress", "Selenium to Eggplant", "migrate WebDriver", "translate webdriver test", "port Selenium", "Selenium → OpenTest.AI", "Selenium to Testers.AI", or any mention of Selenium alongside any of the supported targets.
Convert Selenium WebDriver tests to and from Eggplant (SenseTalk), OpenTest.AI, Testers.AI Recorder, Testers.AI Dynamic, Playwright, and Cypress. Handles Selenium Java (JUnit/TestNG), Python (pytest/unittest), JavaScript (Mocha/Jest), C# (NUnit/MSTest/xUnit), and Ruby. Use whenever the user wants to migrate a Selenium test suite, translate a single Selenium script, or round-trip Selenium through another framework. MANDATORY TRIGGERS — "convert Selenium", "Selenium to Playwright", "Selenium to Cypress", "Selenium to Eggplant", "migrate WebDriver", "translate webdriver test", "port Selenium", "Selenium → OpenTest.AI", "Selenium to Testers.AI", or any mention of Selenium alongside any of the supported targets.
This skill converts tests from Selenium to any supported target, or to Selenium from another framework. It defers orchestration, target semantics, and cross-framework rules to the open-testing-convert master skill.
When to use
Trigger when:
The user references a Selenium codebase, file, or snippet and asks to migrate or translate it.
The user asks to convert to Selenium from a recording (Testers.AI Recorder) or a natural-language format (OpenTest.AI, Testers.AI Dynamic).
The user uploads a .java, .py, .js, .ts, .cs, or .rb file containing WebDriver, ChromeDriver, RemoteWebDriver, By., @Test, driver.get, etc.
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). For Selenium the source language is one of Java, Python, JavaScript/TypeScript, C#, or Ruby.
(Cypress: refer to shared/wait-strategies.md §Cypress and shared/assertion-mapping.md for the Cypress column)
Read this skill's reference files:
reference/source-profile.md — what Selenium tests look like across languages.
reference/extraction.md — how to extract a canonical test intent from Selenium 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, detected language, target, language choice, any TODOs.
Scope
Selenium 3.x and 4.x. Prefer 4.x locator idioms when generating Selenium.
Selenium Grid, Appium 1.x that reuses WebDriver — Appium is covered by open-testing-convert-appium; this skill stops at pure Selenium.
Page Object Model tests are supported — flatten the page-object calls into inline actions during extraction.
Out of scope (delegate to sibling skills)
Appium (mobile WebDriver): use open-testing-convert-appium.
Cucumber-Java / Cucumber-JVM that wraps Selenium: use open-testing-convert-cucumber (it will invoke this skill as a sub-call for the step-definition layer).
Quick reference: Selenium verbs and their canonical conversions
Selenium (Java)
Intent
Conversion hub
driver.get(url)
navigate
shared/wait-strategies.md §Navigation
driver.findElement(By.id("x")).click()
click
shared/locator-mapping.md
driver.findElement(By.id("x")).sendKeys("y")
text input
shared/locator-mapping.md
new WebDriverWait(driver, ...).until(ExpectedConditions.visibilityOfElementLocated(by))