Spec-Zone.ru › Playwright

Фикстуры

Playwright Test основан на концепции тестовых фикстур. Фикстуры используются для настройки окружения каждого теста, предоставляя ему всё необходимое и ничего лишнего.

Playwright Test анализирует объявление каждого теста, определяет набор необходимых ему фикстур и подготавливает их специально для этого теста. Значения, подготовленные фикстурами, объединяются в один объект, который передаётся в качестве первого параметра в test, хуки, аннотации и другие фикстуры.

import { test, expect } from '@playwright/test';

test('basic test', async ({ page }) => {
  // ...
});

Для приведённого выше теста Playwright Test настроит фикстуру page перед запуском теста и удалит её после его завершения. Фикстура page предоставляет объект Page, доступный тесту.

Playwright Test включает перечисленные ниже встроенные фикстуры, и вы также можете добавлять собственные. Playwright Test также предоставляет параметры для настройки fixtures.browser, fixtures.context и fixtures.page.

Методы​

mount​

Монтирует историю компонента и возвращает Locator, указывающий на корневой элемент, в который была отрисована история. Выполняйте поиск относительно возвращённого локатора: component.getByRole('button'), а не page.getByRole('button').

История — это небольшая обёртка-компонент, которая помещает тестируемый компонент в один конкретный сценарий: жёстко заданные свойства, тестовые данные, провайдеры, записанные обратные вызовы. Истории отображаются на странице галереи, которую вы реализуете и размещаете по адресу testOptions.baseURL. Галерея предоставляет функции window.mount(params) и window.unmount(), которые отображают историю в её корневом элементе. Каждый вызов fixtures.mount() переходит по адресу testOptions.baseURL и вызывает window.mount() с идентификатором истории и свойствами, поэтому тесты полностью изолированы друг от друга.

Использование

test('click should expand', async ({ mount }) => {
  const component = await mount('components/Expandable/Stateful');
  await component.getByRole('button').click();
  await expect(component.getByTestId('expanded')).toHaveValue('true');
});

Передайте тип истории в качестве аргумента шаблона, чтобы проверить типы свойств:

import type { WithTitle } from './Button.story';

test('renders the title', async ({ mount }) => {
  const component = await mount<typeof WithTitle>('Button/WithTitle', { title: 'Hello' });
  await expect(component).toContainText('Hello');
});

К возвращённому локатору добавлены два метода:

  • update(props) — повторно отображает ту же историю с новыми свойствами без повторного монтирования, сохраняя состояние компонента;
  • unmount() — размонтирует историю.

Аргументы

  • storyId string

    Идентификатор истории для монтирования, определяемый страницей галереи. Обычно это путь к файлу истории и имя экспортируемой истории, например 'components/Button/Primary'.

  • props Object (необязательно)

    Необязательные простые сериализуемые свойства, передаваемые истории.

Возвращает

  • Locator

Свойства​

browser​

Экземпляр Browser используется совместно всеми тестами в одном рабочем процессе — это повышает эффективность тестирования. При этом каждый тест выполняется в изолированном BrowserContext и получает чистое окружение.

Узнайте, как настроить браузер, и ознакомьтесь с доступными параметрами.

Использование

test.beforeAll(async ({ browser }) => {
  const page = await browser.newPage();
  // ...
});

Тип

  • Browser

browserName​

Название браузера, в котором запускаются тесты. По умолчанию — 'chromium'. Полезно для добавления аннотаций к тестам в зависимости от браузера.

Использование

test('skip this test in Firefox', async ({ page, browserName }) => {
  test.skip(browserName === 'firefox', 'Still working on it');
  // ...
});

Тип

  • "chromium" | "firefox" | "webkit"

context​

Изолированный экземпляр BrowserContext, создаваемый для каждого теста. Контексты изолированы друг от друга, поэтому каждый тест получает чистое окружение, даже если несколько тестов выполняются в одном Browser для максимальной эффективности.

Узнайте, как настроить контекст, и ознакомьтесь с доступными параметрами.

Фикстура fixtures.page по умолчанию относится к этому контексту.

Использование

test('example test', async ({ page, context }) => {
  await context.route('*external.com/*', route => route.abort());
  // ...
});

Тип

  • BrowserContext

page​

Изолированный экземпляр Page, создаваемый для каждого теста. Страницы изолированы друг от друга благодаря изоляции fixtures.context.

Это наиболее часто используемая в тестах фикстура.

Использование

import { test, expect } from '@playwright/test';

test('basic test', async ({ page }) => {
  await page.goto('/signin');
  await page.getByLabel('User Name').fill('user');
  await page.getByLabel('Password').fill('password');
  await page.getByText('Sign in').click();
  // ...
});

Тип

  • Page

request​

Изолированный экземпляр APIRequestContext для каждого теста.

Использование

import { test, expect } from '@playwright/test';

test('basic test', async ({ request }) => {
  await request.post('/signin', {
    data: {
      username: 'user',
      password: 'password'
    }
  });
  // ...
});

Тип

  • APIRequestContext

© 2026 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-fixtures

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API