Migrating from Octomind
Octomind announced it was shutting down in April 2026 and ended its service at the end of May. Its tests exported as standard Playwright code, so your suite still runs: nothing is urgent.
Sources (third-party coverage; Octomind's own site no longer resolves):rywalker.com analysis,rfp.wiki vendor profile (checked 9 October 2026). More: Octomind alternative.
The plan
- Keep the export running with
npx playwright test. It needs nothing from Octomind. - Pick the tests you'll keep maintaining, usually the ones that broke most often.
- Rewrite each as a plain-English test (the table below), record it once, and delete the old spec when the new test passes.
npx playwright test # 1. your exported suite still runs as it is
npx optestra init # 2. a project next to it (your specs are left alone)
npx optestra author tests/login.test.md # 3. each rewritten test, recorded once
npx optestra run --replay-only # 4. replays with no AI; then retire the old specComing There is no importer for Octomind exports yet: automatic import is planned. The rewrite is by hand, with the same mapping as migrating from Playwright.
What maps to what
| Exported Playwright | In a test file |
|---|---|
test("Checkout works", …) | name: Checkout works in the frontmatter; one test per .test.md file |
page.goto("/pricing") | start: /pricing, or a step Go to /pricing |
getByRole("button", { name: "Save" }).click() | Click "Save", or exactly: Exact: click role=button[name="Save"] |
getByLabel("Email").fill(email) | Fill "Email" with {{data.email}}, or Exact: fill label="Email" with {{data.email}} |
selectOption("Europe/London") | Select "Europe/London" in "Time zone" |
keyboard.press("Enter") | Exact: press Enter |
expect(heading).toHaveText(…) | Expect: the page heading is "Welcome" |
expect(page).toHaveURL(/dashboard/) | Expect: the URL contains /dashboard |
expect(locator).toBeVisible() | Expect: "Saved" is visible |
expect(rows).toHaveCount(5) | Expect: the orders table shows 5 orders, or Exact: expect css=.order-row count 5 |
test.step / helper functions | a flow (kind: flow) included with Use: flows/login.test.md |
storageState / global setup login | an auth profile: auth: admin logs in once and reuses the saved session |
process.env.PASSWORD | {{secret.PASSWORD}}, declared with the domains it may be typed into |
test data, faker | data: and {{unique.email}}, {{faker.name}} |
page.route() mocks | Coming Network mocking isn't available yet |
anything else | a ```ts code step, kept verbatim (runs through the generated spec, not healed) |
So it doesn't happen again
With Optestra, the tests are files in your repository, the engine that runs them is open source, and every recorded website test is also a Playwright spec. If we disappear too, nothing breaks:here's exactly why.