What are the advantages of using Page Object Models as fixtures in @playwright/test, and how can they be organized in multiple files?


Advantages of Using Page Object Models as Fixtures

Using Page Object Models (POMs) as fixtures in @playwright/test provides several benefits:

  1. Code Reusability: POMs help you reuse code across multiple test files, making your test suite more maintainable.
  2. Separation of Concerns: POMs separate the page logic from the test logic, making it easier to understand and update your tests.
  3. Readability: POMs make your tests more readable by abstracting complex page interactions into simple methods.

Organizing Fixtures in Multiple Files

To organize fixtures in multiple files, you can create separate TypeScript files for each fixture and import them into your test files. Here's an example:

  1. Create a fixtures.ts file with your POM fixture:
import { test as baseTest } from '@playwright/test';

export const test = baseTest.extend<{ pageModel: PageModel }>({
  pageModel: async ({ page }, use) => {
    const pageModel = new PageModel(page);
    await use(pageModel);
  1. Create a PageModel.ts file with your POM class:
import { Page } from '@playwright/test';

export class PageModel {
  constructor(private page: Page) {}

  async navigate() {
    await this.page.goto('https://ray.run/');

  async getTitle() {
    return await this.page.title();
  1. Import the test fixture and PageModel class in your test file:
import { test, expect } from './fixtures';
import { PageModel } from './PageModel';

test('Check page title', async ({ pageModel }) => {
  await pageModel.navigate();
  const title = await pageModel.getTitle();

By organizing your POM fixtures and classes in separate files, you can easily manage and scale your test suite.

Thank you!
Was this helpful?
Still have questions?

If you still have questions, please ask a question and I will try to answer it.

AboutQuestionsDiscord ForumBrowser ExtensionTagsQA Jobs

Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email luc@ray.run.