The ShopKart Test Range
A real e-commerce app, built to be automated β and to break on command. Practice writing tests, hunting bugs, and choosing selectors that survive.
Mode A β Locator Playground
No setup. Right in your browser.
Type a CSS selector, watch it highlight on the live store, and get an instant robustness score. The fastest way to build the #1 automation skill: picking locators that don't break.
Open the Playground βMode B β Write real tests
Playwright, on your machine, against this app.
Point your own test suite at this store, flip on a bug, and practice the full loop: reproduce β write a test that catches it β add a regression test. Grab the starter and you're writing tests in two minutes.
Point your tests here
Using the starter, or your own project. The app lives under /shopkart.
// playwright.config.ts
use: {
baseURL: 'https://resources.criodo.com',
} await page.goto('/shopkart/login');
await page.locator('[data-test="username"]').fill('student');
await page.locator('[data-test="password"]').fill('crio123');
await page.locator('[data-test="login-button"]').click();
await expect(page).toHaveURL(/inventory/); student Β· password crio123.
Every element has a stable data-test attribute β inspect the app to find them.
Inject a bug, then catch it
Open the store and use the floating π Test Range panel, or add ?bugs=β¦ to any URL to reproduce a scenario. Each bug is a challenge: reproduce it, write a test that fails on it, then a regression test that guards the fix.
broken-images Every product image fails to load (points at a 404). β assertion design cart-total The order total silently drops the tax β it undercharges. β correctness / money bugs lastname-swap Checkout's last-name field overwrites the first name. β the bug-report loop slow-inventory The catalog loads ~3.5s late. β flakiness / web-first waits addtocart-fail One product's βAdd to cartβ button silently does nothing. β negative / edge cases Example scenario link: /shopkart/checkout?bugs=lastname-swap β bugs persist for your browser tab and are shareable via the URL.
API Lab
A real HTTP API to practice API testing (status codes, JSON, POST bodies) and network interception β mock what the page fetches, or force slow/failed calls to test loading and error states.
Components Gym
The tricky widgets that break naive automation β modals, tabs, tables, autocomplete, toasts, dynamic IDs, delayed renders, file upload β each with a focused practice task.
Part of the Crio QA & SDET track. Pair this with the E-Commerce Test Automation course.