playwright-ts
v1.1.5
Published
This Playwright Test Automation Framework provides a standardized setup for implementing automated tests in multiple projects using Playwright. It offers a structured approach with a Page Object Model (POM) at its core, allowing for easy maintenance and r
Readme
Playwright Test Automation Framework
This Playwright Test Automation Framework provides a standardized setup for implementing automated tests in multiple projects using Playwright. It offers a structured approach with a Page Object Model (POM) at its core, allowing for easy maintenance and readability of tests.
Installation
To install the framework in your project, use npm:
npm install playwright-tsUsage
Extending the BasePage
The BasePage class is the foundation for creating page-specific classes. Extend BasePage for each page in your application, defining the selectors and methods relevant to that page.
Example: SearchPage
import { Page } from 'playwright';
import { BasePage } from 'playwright-ts';
export class SearchPage extends BasePage {
private searchFieldSelector: string;
constructor(page: Page) {
super(page, '/search');
this.searchFieldSelector = '#searchbox_input';
}
async search(searchKeyword: string): Promise<void> {
await this.page.fill(this.searchFieldSelector, searchKeyword);
await this.page.keyboard.press('Enter');
}
}Example: ResultsPage
import { Page } from 'playwright';
import { BasePage } from 'playwright-ts';
export class ResultsPage extends BasePage {
private resultsSelector: string;
constructor(page: Page) {
super(page, '/results');
this.resultsSelector = '#results';
}
getDuckBar(): Locator {
return this.page.locator(this.duckBarSelector);
}
}Using BasePageProvider
BasePageProvider is a utility class designed to simplify the management and usage of multiple page objects in your tests. It centralizes the creation and initialization of page objects, allowing you to access them easily within your test cases.
Example BasePageProvider:
import { Browser, Page } from 'playwright';
import { BasePageProvider } from 'playwright-ts';
import { SearchPage } from './SearchPage';
import { ResultsPage } from './ResultsPage';
export class PageProvider extends BasePageProvider {
constructor(browser: Browser, page: Page) {
super(browser, page);
this.registerPageObject('search', SearchPage);
this.registerPageObject('results', ResultsPage);
}
getSearchPage(): SearchPage {
return this.getPageObject<SearchPage>('search');
}
getResultsPage(): ResultsPage {
return this.getPageObject<ResultsPage>('results');
}
}Example Test Using BasePageProvider:
import { test, expect } from '@playwright/test';
import { PageProvider } from '../src/pages/PageProvider';
test.describe('Search', () => {
let provider: PageProvider;
test.beforeEach(async ({ browser, page }) => {
provider = new PageProvider(browser, page);
});
test('Should search for \'Potato\' and see relevant results', async () => {
const searchPage = provider.getSearchPage();
const resultsPage = provider.getResultsPage();
await searchPage.navigateToPage();
await searchPage.search('Potato');
await expect(ResultsPage.getDuckBar()).toBeVisible()
});
});Contributing
Contributions are welcome! If you would like to contribute, please submit a pull request or open an issue for discussion.
