# Import Selenium, Cypress and Playwright Tests

Learn more about automated migration on our [Test Case Import](https://testowl.ai/features/test-case-import) solution page.

Already have automated tests written in a code-based framework? The **Import Wizard** migrates them into TestOwl by converting your existing tests into native TestOwl assets: **Test Suites**, **Test Cases**, reusable **Flows**, **Variables**, and **Secrets**.

Instead of rebuilding your automation from scratch, you can import your existing test project and keep improving it with TestOwl's no-code workflow.

:::quote{author="TestOwl Team"}
Migration should be a starting point, not a restart.
:::

Open **Import Tests** from the sidebar. Importing requires the **Editor**, **Admin**, or **Owner** role.

## Supported frameworks

| Framework | Language |
| --- | --- |
| [Playwright](https://playwright.dev/docs/intro) | TypeScript / JavaScript |
| Playwright | Python |
| [Cypress](https://docs.cypress.io/) | TypeScript / JavaScript |
| WebdriverIO | TypeScript / JavaScript |
| Puppeteer | TypeScript / JavaScript |
| Nightwatch.js | TypeScript / JavaScript |
| TestCafe | TypeScript / JavaScript |
| [Selenium](https://www.selenium.dev/documentation/) | JavaScript / TypeScript |
| Selenium | Java (TestNG) |
| Selenium | Java (JUnit) |
| Selenium | C# |
| Selenium | Python |
| Robot Framework | Robot |
| [Cucumber](https://cucumber.io/docs/) | `.feature` files |
| Cucumber | Python |

## The Imports page

The page lists every import you've done, with its **Framework**, number of **Files**, **Status**, **Result** (for example *3 suites · 24 tests · 2 flows · 5 vars · 1 secrets*), and when it **Started**. Summary cards show **Total Imports** and how many **Completed**. You can search by framework and filter by status (**Uploaded**, **Previewed**, **Running**, **Completed**, **Failed**) or framework. Click a row to open its details.

Click **New Import** to start the wizard.

## The four steps

The wizard has four steps: **Upload → Configure → Preview → Import**. Nothing is created in your project until you confirm the last step.

![Diagram of the import pipeline](/diagrams/import-pipeline.png)

### 1. Upload

Upload your test project as a **ZIP archive**, a **whole folder**, or individual files. TestOwl analyses the files and works out which framework they use.

:::info{title="Upload limits"}
A single upload can contain up to **200 MB** or **2,000 files**.
:::

:::warning{title="Import working tests only"}
Make sure the tests you upload already pass. Broken or failing tests may not convert correctly, and the imported steps could behave differently than you expect.
:::

### 2. Configure

TestOwl shows the framework it detected and the signals it used. Confirm or change the **Source framework**, then choose what to detect:

- **Detect shared flows** — find repeated step sequences, such as a login, and turn them into reusable Flows.
- **Extract variables** — turn configuration values, such as URLs, into Variables.
- **Detect secrets** — pull credentials out into encrypted Secrets.

All three are on by default.

### 3. Preview

TestOwl builds a preview of everything it is about to create. Review it and fix anything that needs a decision:

- **Summary** — the framework, and the number of test suites, test cases, shared flows, variables, and secrets.
- **Test suites and test cases** — each test shows its **Suite**, a **Confidence** percentage, and a **Verdict** on how well it converted.
- **Shared flows** — the Flows that will be created, how many steps they contain, and how many tests use them ("call sites"). You can see the final name each will get.
- **Variables and Secrets** — the values TestOwl found. Secret values are stored encrypted and never shown.
- **Items that need manual review** — a list of things that couldn't be converted automatically.

Two things must be sorted out before you can import:

1. **Suite name conflicts.** If an imported suite has the same name as one already in your project, choose what to do with each: **Replace** (delete the existing suite and its tests, and remove it from any schedule that runs it), **Skip** (leave your existing suite and don't import that one), or **Keep Both** (import the new one under a new name).
2. **Missing values.** If your tests refer to a variable or secret whose value TestOwl couldn't read from the source — for example a value produced by a fixture at run time — you'll be asked to enter it.

The **Import** button stays disabled until every conflict has a choice and every missing value is filled in.

### 4. Import

TestOwl creates everything in a safe order — Flows first, then variables and secrets, then suites, then test cases — while showing progress. The import is **all or nothing**: if something goes wrong, TestOwl tells you what and **nothing is created**, so you can go back, adjust, and try again.

When it finishes you see a recap of what was created, and any items that were replaced, kept under a new name, or skipped.

- A suite you chose to **Replace** is moved to the [Recycle Bin](/docs/workspace/recycle-bin) (marked as replaced), so you can get it back within 15 days.
- If replacing a suite left a [schedule](/docs/running-and-results/schedules) with nothing to run, TestOwl tells you the schedule was paused. Schedules that still have other targets keep running.

## Reviewing an import

Click any import on the Imports page to open its details. Tabs show everything that was created — **Overview**, **Suites**, **Tests**, **Flows**, **Variables & Secrets** — plus an **Issues** tab listing the items that need attention, with the source, type, reason, and severity of each.

The Overview also shows how many files were parsed or skipped, how many tests were found, how many need review, and how many steps were mapped.

:::warning{title="Manual review may be required"}
Some framework-specific features, custom plugins, or unsupported commands can't be converted automatically. TestOwl flags these in the preview and the Issues tab, and adds a **MANUAL REVIEW** comment step to the affected test cases so you can find them. Always open a few imported tests in the [Step Editor](/docs/building-tests/the-editor) and check that the steps, variables, and flows do what you expect before relying on them.
:::

## Next steps

::::cardgrid
:::card{title="The Step Editor" href="/docs/building-tests/the-editor"}
Review and customize imported test steps.
:::

:::card{title="Flows" href="/docs/building-tests/flows"}
Learn how reusable Flows organize your test automation.
:::

:::card{title="Recycle Bin" href="/docs/workspace/recycle-bin"}
Restore a suite that an import replaced.
:::
::::
