A portfolio project by Denys Ishchuk demonstrating maintainable UI and API automation with Playwright and TypeScript. The framework turns test strategy into executable, cross-browser release evidence—not just a collection of scripts.
- Page Object Model with responsibility-focused methods
- Positive, negative, and state-transition UI scenarios
- Passwordless authentication coverage against a real product login flow
- API status, header, and response-body validation
- Data separated from test behavior
- Smoke tagging for fast feedback
- Chromium, Firefox, and WebKit coverage
- Parallel execution with CI retries
- HTML and JUnit reporting
- Traces, screenshots, and videos for failure triage
- GitHub Actions quality gates and retained evidence
- A documented, risk-based test strategy
- UI: Playwright TodoMVC demo
- Authentication: Reelly AI
- API: JSONPlaceholder
These public demo services keep the project reproducible and free of employer code or confidential data.
.
├── .github/workflows/ # Cross-browser CI pipeline
├── docs/ # Test strategy and quality decisions
├── pages/ # Page objects
├── test-data/ # Reusable test inputs
├── tests/
│ ├── api/ # REST API scenarios
│ └── ui/ # Browser scenarios
├── playwright.config.ts # Execution, reporting, and evidence settings
└── tsconfig.json # Strict TypeScript checks
Prerequisites: Node.js 20+ and npm.
npm ci
npx playwright install
npm testUseful commands:
npm run test:smoke # fastest critical-path signal
npm run test:api # API suite only
npm run test:reelly # Reelly AI sign-in coverage on Chromium
npm run test:chromium # one browser
npm run test:ui # interactive Playwright UI
npm run typecheck # validate TypeScript without emitting files
npm run report # open the latest HTML reportThe defaults run without secrets. Override targets through environment variables when needed:
BASE_URL=https://demo.playwright.dev/todomvc/ \
API_BASE_URL=https://jsonplaceholder.typicode.com \
npm testSee .env.example for supported values. Never commit credentials or environment-specific secrets.
The Reelly flow is passwordless: a registered user enters an email address and receives a six-digit one-time code. The default suite safely checks the public login contract, required-field behavior, invalid email validation, and recovery/registration paths without sending email or storing account data.
The live code-request scenario is deliberately opt-in. Run it with a registered test account:
REELLY_EMAIL=qa-account@example.com npm run test:reellyThe test confirms that Reelly advances to the one-time-code step. End-to-end OTP submission is excluded until the framework has a controlled mailbox/API fixture; this avoids committing secrets, depending on a human-readable inbox, or repeatedly messaging real users in CI.
- Tests assert user-visible outcomes rather than implementation details where practical.
- Page objects encapsulate interactions; business assertions stay readable in specifications.
- Test data is deterministic and unique to each browser context.
- CI captures evidence only when useful, balancing debuggability and storage.
- The test strategy states both coverage and deliberate exclusions.
Denys Ishchuk — QA Engineer with four years of manual testing experience, test-strategy ownership, performance testing with Apache JMeter, team leadership, and growing automation expertise.
This repository began as a fork of Microsoft's playwright-examples. The portfolio framework, structure, documentation, and showcased scenarios have been redesigned for original demonstration purposes. Playwright is maintained by Microsoft and is used under its applicable license.
MIT