Skip to main content
← All projects
QA Automation

SauceDemo Automation Suite

A Playwright + TypeScript test automation framework for SauceDemo, 71 tests across 15 spec files, page object model with fixture composition, tagged CI gating across three browser engines, and a documented decision log for every non-obvious call.

QAPlaywrightTypeScriptCI/CD

The problem

Most QA automation portfolios show tests passing: They don’t show why the tests are structured the way they are, what happens when a locator changes, or how someone decided what was worth automating and what wasn’t.

I built this suite to put ten years of software engineering behind test automation. Instead of a folder of standalone test scripts, it needed to read like a framework a team would inherit: page objects instead of pasted locators, fixtures that compose instead of a beforeEach repeated in every file, and a written reason for every decision that isn’t obvious from the code alone.

A reader skimming a repo full of green checkmarks has no way to tell whether the person behind it thought about maintenance cost, flake reduction, or CI gating, which is what the actual QA job implies.

What I built

The suite tests SauceDemo, Sauce Labs’ practice storefront, across Chromium, Firefox, and WebKit: 71 tests across 15 spec files, split between functional specs (one file per page or feature: auth, cart, checkout, inventory, navigation) and full multi-page e2e journeys through the checkout flow.

Every test carries a tag (@smoke, @regression, @e2e, @a11y, @visual, @security, @performance, @problematic), so CI runs a different slice depending on the trigger: lint, typecheck, and a chromium-only smoke check on every push; the regression + e2e + a11y gate on push to main; the full suite minus @problematic, across all three engines, on every pull request into main.

Auth runs once per user profile (standard, performance, problem) as a Playwright setup project that saves storage state, so none of the tests re-authenticate on their own. A second setup project seeds a three-item cart on top of that session for the specs that need one already populated.

13 defects are logged against the app itself: 11 functional, 2 accessibility. Each one is a test.skip with the full reproduction steps left intact and a matching entry in a defect log.

Technical highlights

Live application
View the repository