A robust end-to-end test automation framework built with Playwright for modern web applications
Getting Started β’ Features β’ Architecture β’ Test Examples β’ CI/CD
- Overview
- Features
- Architecture
- Project Structure
- Getting Started
- Test Examples
- CI/CD Pipeline
- Configuration
- Best Practices
- Contributing
This Playwright Automation Framework provides a comprehensive solution for automated end-to-end testing of web applications. Built with modern JavaScript and Playwright Test, it demonstrates various testing patterns, locator strategies, and best practices for building maintainable test suites.
- π Playwright Documentation
- π DemoBlaze E-commerce
- π’ OrangeHRM Demo
| Feature | Description |
|---|---|
| π Cross-Browser Testing | Run tests on Chromium, Firefox, and WebKit |
| β‘ Parallel Execution | Fully parallel test execution for faster results |
| π HTML Reports | Beautiful, interactive HTML test reports |
| π CI/CD Integration | GitHub Actions workflow included |
| π― Multiple Locator Strategies | XPath, CSS, Built-in locators demonstration |
| π Auto-Retry on CI | Automatic retries for flaky tests in CI environment |
| πΈ Trace on Failure | Detailed traces captured on first retry |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PLAYWRIGHT AUTOMATION FRAMEWORK β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββββββββββ β
β β GitHub βββββΆβ GitHub Actions βββββΆβ Test Execution β β
β β (Push/PR) β β CI Pipeline β β Environment β β
β βββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββββββββββ β
β β β β
β βΌ βΌ β
β ββββββββββββββββββββ βββββββββββββββββββββββββββ β
β β Install Deps β β Playwright Test β β
β β & Browsers β β Runner β β
β ββββββββββββββββββββ βββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββββββββββ€ β
β β β β
β βΌ βΌ β
β ββββββββββββββββββββ βββββββββββββββββββββββββββ β
β β HTML Report β β Artifact Upload β β
β β Generation β β (30 days retention) β β
β ββββββββββββββββββββ βββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TEST EXECUTION FLOW β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββ
β Test Spec β
β (.spec.js) β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ βββββββββββββββββββββββββββββββββββββββββββββββ
β Playwright Test ββββββΆβ BROWSER PROJECTS β
β Runner β β βββββββββββ βββββββββββ βββββββββββ β
βββββββββββββββββββ β βChromium β β Firefox β β WebKit β β
β β β(Chrome) β β β β(Safari) β β
β β βββββββββββ βββββββββββ βββββββββββ β
β βββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β Page Fixture ββββββββββββββββββββββββββββββββββββββββββββ
β (Browser Page) β β
ββββββββββ¬βββββββββ β
β β
βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ
β Navigation β β Locators β
β page.goto() β β Strategies β
ββββββββββ¬βββββββββ ββββββββββ¬βββββββββ
β β
βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ
β Interactions βββββββββββββββββββββββββββββββββββ β’ XPath β
β β’ click() β β β’ CSS Selector β
β β’ fill() β β β’ getByRole() β
β β’ type() β β β’ getByText() β
ββββββββββ¬βββββββββ β β’ getByAltText()β
β β β’ Placeholder β
βΌ βββββββββββββββββββ
βββββββββββββββββββ
β Assertions β
β expect() β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Test Results β
β (Pass/Fail) β
βββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β COMPONENT ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β CONFIGURATION LAYER β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β playwright.config.js β β β
β β β β’ testDir: ./tests β β β
β β β β’ fullyParallel: true β β β
β β β β’ reporter: 'html' β β β
β β β β’ trace: 'on-first-retry' β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β TEST LAYER (tests/) β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββ β β
β β βexample.spec β βHomePage.specβ βLocators.specβ β More... β β β
β β β .js β β .js β β .js β β β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β CI/CD LAYER (.github/workflows/) β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β playwright.yml β β β
β β β Triggers: push/PR to main/master β β β
β β β Steps: Checkout β Setup Node β Install β Test β Report β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Playwright-Automation/
β
βββ π .github/
β βββ π workflows/
β βββ π playwright.yml # CI/CD pipeline configuration
β
βββ π tests/ # Test specifications
β βββ π example.spec.js # Playwright.dev basic tests
β βββ π HomePage.spec.js # Home page validation tests
β βββ π Locators.spec.js # XPath locator examples
β βββ π Locators_buildin.spec.js # Built-in locator examples
β βββ π LocatingMultipleElements.spec.js # Multiple elements handling
β
βββ π .gitignore # Git ignore rules
βββ π package.json # Project dependencies
βββ π package-lock.json # Locked dependencies
βββ π playwright.config.js # Playwright configuration
βββ π README.md # Project documentation
- Node.js (LTS version recommended)
- npm (comes with Node.js)
-
Clone the repository
git clone https://github.com/KunjMaheshwari/Playwright-Automation.git cd Playwright-Automation -
Install dependencies
npm install
-
Install Playwright browsers
npx playwright install --with-deps
# Run all tests
npx playwright test
# Run tests in headed mode (see browser)
npx playwright test --headed
# Run specific test file
npx playwright test tests/HomePage.spec.js
# Run tests on specific browser
npx playwright test --project=chromium
npx playwright test --project=firefox
npx playwright test --project=webkit
# Run tests with UI mode
npx playwright test --ui
# Show HTML report
npx playwright show-reporttest('Home Page', async ({page}) => {
await page.goto("https://www.demoblaze.com/");
await expect(page).toHaveTitle("STORE");
await expect(page).toHaveURL("https://www.demoblaze.com/");
});test('Build In Locators', async ({page}) => {
await page.getByPlaceholder("Username").fill("Admin");
await page.getByPlaceholder("Password").fill("admin123");
await page.getByRole("button", {type:'submit'}).click();
});test('Locators', async ({page}) => {
await page.click("//a[text()='Sign up']");
await page.locator("//input[@id='sign-username']").fill("Kunj");
});test('Multiple Locators', async ({page}) => {
const productList = await page.$$("//div[@id='tbodyid']//h4//a");
for (const product of productList) {
const productName = await product.textContent();
console.log("Product Name: ", productName);
}
});The project includes a fully configured CI/CD pipeline that runs on every push or pull request to main/master branches.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GITHUB ACTIONS PIPELINE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β PUSH β β PR β β MANUAL β β
β β to main/ β β to main/ β β TRIGGER β β
β β master β β master β β β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
β β β β β
β βββββββββββββββββββββ΄ββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β JOB: test β β
β β runs-on: ubuntu-latest β β
β β timeout: 60 minutes β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββΌββββββββββββββββββββ β
β βΌ βΌ βΌ β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β Checkout βββββββΆβSetup Node βββββββΆβInstall Depsβ β
β β Code β β (LTS/*) β β (npm ci) β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββ β
β β Install Playwright Browsers β β
β β npx playwright install β β
β β --with-deps β β
β βββββββββββββββββ¬βββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββ β
β β Run Playwright Tests β β
β β npx playwright test β β
β βββββββββββββββββ¬βββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββββ β
β β Upload Test Artifacts β β
β β (playwright-report/) β β
β β Retention: 30 days β β
β ββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- β Automatic trigger on push/PR
- β Node.js LTS version
- β All browser dependencies installed
- β HTML reports uploaded as artifacts
- β 30-day artifact retention
| Project | Browser | Description |
|---|---|---|
chromium |
Desktop Chrome | Google Chrome browser engine |
firefox |
Desktop Firefox | Mozilla Firefox browser |
webkit |
Desktop Safari | Apple Safari browser engine |
// playwright.config.js
{
testDir: './tests', // Test files location
fullyParallel: true, // Run tests in parallel
forbidOnly: !!process.env.CI, // Fail if test.only in CI
retries: process.env.CI ? 2 : 0, // Retry failed tests in CI
workers: process.env.CI ? 1 : undefined, // Worker threads
reporter: 'html', // HTML report generation
trace: 'on-first-retry', // Capture trace on retry
}- π― Use Semantic Locators - Prefer
getByRole(),getByText(),getByPlaceholder()over CSS/XPath - β±οΈ Implicit Waiting - Playwright auto-waits for elements
- π Parallel Execution - Tests run in parallel for speed
- π Comprehensive Reporting - HTML reports with traces
- π CI/CD Integration - Automated testing pipeline
- π§Ή Clean Test Structure - Each test is independent
- Implement Page Object Model (POM) for larger test suites
- Add API testing capabilities
- Configure visual comparison testing
- Set up environment-specific configurations
- Add custom fixtures for common operations
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the ISC License.
Kunj Maheshwari
- GitHub: @KunjMaheshwari
β Star this repository if you find it helpful!
Made with β€οΈ using Playwright