Authentication
- Registration
- Duplicate registration
- Valid login
- Invalid credentials
- Account deletion
End-to-End QA Automation & Continuous Testing
An independent, self-initiated QA project, not client work, run against automationexercise.com, a public practice store. It combines manual testing, REST API validation, Playwright UI automation, Page Object Model architecture, debugging and GitHub Actions CI.
26 test definitions (16 API, 10 UI) passed in the GitHub Actions run of 29 August 2026 (commit 789d413), with CI retries enabled. This is a historical result, not a current execution status.
Rather than treating automation as a collection of isolated browser scripts, I approached the application through multiple QA layers.
The project combines test planning, manual and exploratory validation, API testing, UI automation, regression execution and release assessment.
The goal was to build a maintainable automation suite that could provide repeatable evidence rather than simply demonstrate that a few browser actions could be automated.
Define scope, risks and test scenarios.
Perform manual and exploratory testing.
Validate REST endpoints and negative cases.
Build Playwright UI regression coverage.
Execute automated tests through GitHub Actions.
Review execution results and quality findings.
The automated suite covers the application's core customer journeys and selected API behaviours.
The automation framework separates test intent from page interaction logic and supports both UI and API testing.
Page interaction logic is separated from individual test scenarios to improve maintainability.
Common operations are centralized instead of being repeatedly implemented inside individual tests.
Tests can begin from an authenticated state where the scenario requires it.
The suite validates behaviour beyond the browser layer by including direct API testing.
export class LoginPage {
constructor(page) {
this.page = page;
// ...
// Login section
this.loginEmailInput = page.locator('input[data-qa="login-email"]');
this.loginPasswordInput = page.locator('input[data-qa="login-password"]');
this.loginButton = page.locator('button[data-qa="login-button"]');
// ...
async login(email, password) {
await this.loginEmailInput.fill(email);
await this.loginPasswordInput.fill(password);
await this.loginButton.click();
}
}
login(). Condensed. pages/LoginPage.js, lines 1–3, 10–13, 30–35 @ 789d413 (opens in a new tab)The project uses GitHub Actions to execute API and UI test suites in CI. The workflow is configured to upload Playwright reports as artifacts (14-day retention; none are currently available, checked 12 October 2026).
The project is not dependent on a local machine to demonstrate that the automation works. The test suite is executable through the CI workflow.
During automation development, checkout scenarios exposed synchronization and cart-state problems. Instead of simply increasing timeouts, I used the available Playwright evidence to investigate the failure path and refine the automation.
The documented QA assessment also records minor UI issues and a third-party ad injection behaviour. These findings are presented as observations from the tested environment rather than being described as application-critical production defects.
The project is backed by source code, QA documentation and CI execution evidence.
Explore the Playwright framework, page objects, API tests and utilities.
Open RepositoryReview the project scope, testing approach, risks and planned validation.
View Test PlanReview the manually designed test scenarios supporting the project.
View Test CasesReview the documented execution results and QA assessment.
View ReportReview the GitHub Actions run history. Job logs require a GitHub sign-in.
View CI RunsOpen the GitHub Actions run of 29 August 2026 (commit 789d413), where the API and UI jobs both passed. Job logs require a GitHub sign-in, and Playwright reports are not committed to the repository.
View Passing RunTest planning and validation were considered before building the automated regression layer.
The framework uses page objects and reusable components instead of placing every interaction directly inside test files.
Application behaviour is validated at both the API and browser layers.
Playwright screenshots, videos and traces are used as evidence when investigating failures.
Automated tests can execute through GitHub Actions instead of relying only on local runs.
Test planning, execution evidence and QA findings are documented alongside the code.
The source code, CI workflow and QA documentation are available for review.