Learn test automation by testing real apps in your browser.

You get a code editor, a live app and a terminal. Write a Playwright, Cypress or Selenium test, run it, and watch it click through the app. The way the job actually works.

Then we break the app on purpose to check your test would have caught the bug. Because a test that cannot fail is not a test.

No account needed. The editor opens with a working example.

login.spec.ts, TestAcademy Workbench
1test('user can sign in', async ({ page }) => {
2 await page.goto('/');

Sign in to Nimbus

Email
Password
Sign in
workbench npx playwright test

This is not a mockup of some other product, it's the starter file. Run this exact test yourself →

how-it-works

One page. A whole testing lab.

Not videos. Not slides. You write tests against software that behaves like the real thing, and every step of the loop happens right here.

choose-your-target

Test software that fights back

Most tutorials teach you on static demo pages, so the first real product breaks everything you learned. The Workbench apps behave like real products. A SaaS login, a storefront, a CRM, with loading delays, validation errors and state that changes while your test runs.

// on YouTube you test someone else's app, frozen in a video

Nimbus · authTerra Supply · shopPipelineHQ · CRM
NimbusSELECTED

SaaS login & auth

async sign-in · validation errors

Terra Supply

E-commerce store

cart state · full checkout

PipelineHQ

CRM dashboard

~700ms saves · CRUD modals

then pick:PlaywrightCypressSelenium

write-it-yourself

Type the test. Don't copy it.

A VS Code-grade editor with autocomplete for the Playwright, Cypress and Selenium APIs. You choose the locator, you pick the assertion, you run it from the terminal. The exact muscle memory a live interview checks for.

// copying from a course teaches your clipboard, not you

getByRoleauto-waitingexpect().toHaveCount()
example.spec.tsTypeScript · typings loaded
1  test('adds product to cart', async ({ page }) => {
2    await page.goto('/');
3    await page.getBy
getByRole(role, options?) → Locator
getByLabel(text) → Locator
getByTestId(id) → Locator
getByText(text) → Locator
Locate by role and accessible name. The way users see the page
4  });
⌘⏎ runautocomplete: framework APIsame shortcuts as your day job

watch-it-run

See exactly what your test touched

Run it and watch the app respond: every element your test clicks or fills is highlighted in the live preview, with a step log of each action. When a selector matches the wrong element, you see it happen. The feedback loop that documentation can't give you.

// docs list the API, they can't show your selector missing

live highlightstep logruns in seconds
pipelinehq.app
Add contact
[ step log ]
page.goto('/')
getByTestId('search').fill(…)
getByRole('button').click() ← highlighted
· expect(toast).toBeVisible()

wrong selector? you see it match the wrong element, live

get-graded

We break the app to check your test

Green does not mean good. So when you solve a problem, we run your test twice: once against the working app, then against a copy where we broke the exact behaviour you were asked to prove. If your test still passes, it was never really testing anything, and we tell you which behaviour you missed.

// no course, video or doc has ever checked your test this way

mutation testingno faking ita real verdict
cart shows the right total5,204ms
Timed out after 5000ms waiting for locator getByTestId('cart-totall')
the app has 'cart-total'. One letter off. Fix it and re-run.
1 edit later:✓ cart shows the right total(612ms)

Challenge complete: Update cart quantities

Terra Supply · challenge 3 of 4

3 frameworks3 real applications22 graded problems10 tutorials204 interview questions

which-framework

"Which one should I learn first?"

The question every beginner asks. Here is the honest answer, and you can change your mind any time, because all three run against the same apps here.

🎭OUR PICK FOR BEGINNERS

Playwright

Start here if you're new

The most requested framework in current job posts, with a modern API. Our tutorials and starter files begin with it.

Try Playwright
🧪

Selenium

For enterprise jobs

The long-time industry standard. If your target companies are large or their stack is older, they run Selenium.

Try Selenium
🌀

Cypress

If the job post names it

Popular in product companies that adopted it early. The command-queue style is different, practice it before the interview.

Try Cypress

Still deciding? Read Playwright vs Cypress (8 min), or don't decide at all: run the same scenario in all three and feel the difference.

start-here

Start where you are

manual-tester

“I test manually today.”

You already know what to test. That is the hard half. The missing half is expressing it in code. Start with the Playwright tutorial and write your first automated login test today, in the browser.

~30 min to your first green test

Start the Playwright tutorial

interview-soon

“I have a QA interview coming up.”

Practice the questions interviewers actually ask, waits, locators, flaky tests, with explanations for every answer. Then rehearse the live-coding part in the same kind of editor you’ll be tested in.

technical + pair coding · by level

Open your interview track

switching-tools

“I know one framework, the job wants another.”

The fastest way to switch is contrast: run the same scenario against the same app in both frameworks. The concepts carry over. You just need the new syntax in your fingers.

same apps · 3 frameworks

Compare them side by side

try-one-now

A real interview question. Right here.

This is question one from the SDET track, exactly as it appears in the interview section. Pick an answer and see how the explanations work.

Prefer to read first? The tutorials cover the same ground:

SDET track · question 01

Your team has 900 UI end-to-end tests and 100 unit tests. The suite takes 3 hours and fails randomly. What is the main structural problem?

Your first test is ten minutes away.

Two questions, then you are writing a test. Hit Verify and find out whether it would really catch the bug , that's the whole method.

Start free →

Your code and progress are saved in your browser.