All projects
Sauce Demo Playwright Suite
A real E2E suite against a live public store, with its report published and replayable here.
Playwright · TypeScript · Allure · GitHub Actions · Shopify
Results
- 25
- functional cases across catalog, cart, checkout, account, and journey
- 3
- browsers — Chromium, Firefox, WebKit, matrixed in CI
- Public
- Allure report published to GitHub Pages on every push
Problem
A portfolio project is easy to dismiss as a toy — a single-file demo nobody could point coworkers at. I wanted a suite that runs against a real, live target with real failure modes, and a report a stranger could open and trust, not a screenshot.
Approach
- Built 25 functional cases (catalog, cart, checkout, account, and a chained signup-to-checkout journey) in Playwright + TypeScript, Page Object Model, typed fixtures, matrixed across Chromium, Firefox, and WebKit in CI.
- Wired Allure reporting into the pipeline and added a GitHub Pages publish step, so every push to main produces a public, browsable report, not just a CI artifact.
- Documented two real constraints from the live target instead of hiding them: Cloudflare's bot management can challenge automated browsers regardless of IP reputation, and hCaptcha hard-blocks registration/login under CDP-driven automation entirely — confirmed via network inspection, not treated as a bug in the suite.
- Built this site's own /qa-suite page to fetch that published report's JSON at request time and replay it case by case, with the full Allure report embedded underneath.
From the code
tests/journey/full-purchase-journey.spec.ts
@account @journeytest.describe('Full purchase journey @account @journey', () => {
test('signup, login, add to cart, checkout, and browse site pages', async ({
registerPage, loginPage, homePage, productPage, cartPage, checkoutPage, page,
}) => {
const user = buildDisposableUser();
await test.step('sign up as a new customer', async () => {
await registerPage.goto();
await registerPage.register(user);
await expect(homePage.header.logOutLink).toBeVisible();
});
// …
});
});Outcome
A suite that runs against a real store and is honest when the store — not the suite — is the reason a run goes red, with a report anyone can open and check for themselves.
Business Impact
The same discipline I bring to production suites — a flaky test is a defect to diagnose, not weather to retry away — applied somewhere anyone can verify it firsthand.