Built for Manual Testing
Exercise positive and negative paths, edge cases, and validation messages the way you’d test production apps.
Browse scenarios →Sharpen manual testing skills and write rock-solid browser automation with Playwright, Cypress, and Selenium — on realistic web pages built for practice.
Open a page, interact with real UI, then automate it — no setup, no licenses, no dashboards.
Exercise positive and negative paths, edge cases, and validation messages the way you’d test production apps.
Browse scenarios →Stable data-testid attributes, predictable DOM, and clean locators ready for Playwright, Cypress, and Selenium.
Forms, carts, tables, modals, iframes, and async UI that mirror the patterns you’ll meet on the job.
Browse scenarios →No accounts, API keys, or paywalls. Jump into any scenario and start testing immediately.
Start free →Most-visited practice suites for manual QA and automation workshops.
Practice positive and negative login flows with visible credentials and clear error states.
Products, cart quantities, pricing totals, and a multi-step checkout journey.
Text fields, checkboxes, radios, dropdowns, textareas, and date controls in one place.
Loading states, delayed content, enable/disable toggles, and elements that appear or vanish.
49 Testing Scenarios — open a page, interact with it, then automate it.
// Point your suite at any TestLab scenario await page.goto('https://testlab.local/scenarios/login.html'); await page.getByTestId('username').fill('testuser'); await page.getByTestId('login-button').click(); await expect(page.getByTestId('success-message')) .toHaveText('Welcome back, testuser!');
// Same scenario, Cypress style cy.visit('/scenarios/login.html'); cy.get('[data-testid="username"]').type('testuser'); cy.get('[data-testid="login-button"]').click(); cy.get('[data-testid="success-message"]') .should('contain', 'Welcome back');
Use these scenarios to reproduce real defect classes your team keeps rediscovering — then automate the coverage.