Automated Page Object and Functional Test Generator for Playwright
npm install playwright-test-generatorbash
npm install -g playwright-test-generator
`
Quick Start ๐
$3
`bash
.env.qa
QA_APP_URL=https://your-qa-app.com
QA_USERNAME=testuser
QA_PASSWORD=testpass
.env.dev
DEV_APP_URL=https://your-dev-app.com
DEV_USERNAME=devuser
DEV_PASSWORD=devpass
`
$3
`bash
generate-page-object --env qa
`
$3
`bash
generate-functional-tests --env qa --depth 2
`
CLI Commands ๐ ๏ธ
$3
`bash
generate-page-object [options]
Options:
-e, --env Environment (dev, qa, prod) (default: "qa")
-h, --headless Run in headless mode (default: false)
-o, --output Output directory (default: "./pageObjects")
--help Display help
`
$3
`bash
generate-functional-tests [options]
Options:
-e, --env Environment (dev, qa, prod) (default: "qa")
-h, --headless Run in headless mode (default: false)
-d, --depth Test depth (1 or 2) (default: "1")
-o, --output Output directory (default: "./tests")
--help Display help
`
Programmatic Usage ๐ป
`typescript
import {
PageObjectGenerator,
TestScenarioGenerator,
NavigationHelper
} from 'playwright-test-generator';
// Use in your own scripts
const generator = new PageObjectGenerator(page);
await generator.generatePageObject('LoginPage', './pageObjects');
`
Generated Output ๐
`
your-project/
โโโ pageObjects/
โ โโโ LoginPage.ts
โ โโโ DashboardPage.ts
โ โโโ UserManagementPage.ts
โโโ tests/
โโโ e2e/
โโโ loginTests.spec.ts
โโโ dashboardTests.spec.ts
โโโ userManagementTests.spec.ts
`
Example Generated Page Object
`typescript
import { Page, Locator, expect } from '@playwright/test';
export class LoginPage {
private page: Page;
constructor(page: Page) {
this.page = page;
}
// Locators
get usernameInput(): Locator {
return this.page.locator('input[name="username"]');
}
get passwordInput(): Locator {
return this.page.locator('input[name="password"]');
}
get loginButton(): Locator {
return this.page.locator('button[type="submit"]');
}
// Methods
async fillUsername(value: string): Promise {
await this.usernameInput.fill(value);
}
async fillPassword(value: string): Promise {
await this.passwordInput.fill(value);
}
async clickLogin(): Promise {
await this.loginButton.click();
}
async verifyPageLoaded(): Promise {
await this.page.waitForLoadState('networkidle');
}
}
`
Requirements ๐
- Node.js 16+
- @playwright/test ^1.40.0
License ๐
MIT
Contributing ๐ค
1. Fork the repository
2. Create your feature branch (git checkout -b feature/amazing-feature)
3. Commit your changes (git commit -m 'Add amazing feature')
4. Push to the branch (git push origin feature/amazing-feature`)