Spec-Zone.ru › Playwright

TestProject

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

TestProject содержит конфигурацию, относящуюся к отдельному проекту. Проекты настраиваются в testConfig.projects, указанном в файле конфигурации. Обратите внимание, что все свойства TestProject доступны в объекте верхнего уровня TestConfig; в этом случае они будут общими для всех проектов.

Ниже приведён пример конфигурации, которая запускает каждый тест в Chromium, Firefox и WebKit, как в настольных, так и в мобильных версиях.

import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  // Options shared for all projects.
  timeout: 30000,
  use: {
    ignoreHTTPSErrors: true,
  },

  // Options specific to each project.
  projects: [
    {
      name: 'chromium',
      use: devices['Desktop Chrome'],
    },
    {
      name: 'firefox',
      use: devices['Desktop Firefox'],
    },
    {
      name: 'webkit',
      use: devices['Desktop Safari'],
    },
    {
      name: 'Mobile Chrome',
      use: devices['Pixel 5'],
    },
    {
      name: 'Mobile Safari',
      use: devices['iPhone 12'],
    },
  ],
});

Свойства​

dependencies​

Список проектов, которые должны быть запущены до начала выполнения любого теста в этом проекте. Зависимости могут пригодиться для настройки действий глобальной инициализации таким образом, чтобы каждое действие выполнялось в форме теста. Передача аргумента --no-deps игнорирует зависимости и ведёт себя так, как если бы они не были указаны.

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

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

import { defineConfig } from '@playwright/test';

export default defineConfig({
  projects: [
    {
      name: 'setup',
      testMatch: /global.setup\.ts/,
    },
    {
      name: 'chromium',
      use: devices['Desktop Chrome'],
      dependencies: ['setup'],
    },
    {
      name: 'firefox',
      use: devices['Desktop Firefox'],
      dependencies: ['setup'],
    },
    {
      name: 'webkit',
      use: devices['Desktop Safari'],
      dependencies: ['setup'],
    },
  ],
});

Тип

  • Array<string>

expect​

Конфигурация для библиотеки проверок expect.

Используйте testConfig.expect, чтобы изменить этот параметр для всех проектов.

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

testProject.expect

Тип

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

      Тайм-аут по умолчанию для асинхронных средств сопоставления expect в миллисекундах; по умолчанию — 5000 мс.

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

      • threshold number (необязательно)

        Допустимая воспринимаемая разница в цвете одного и того же пикселя на сравниваемых изображениях: от 0 (строгое сравнение) до 1 (сравнение с допуском). Компаратор "pixelmatch" вычисляет разницу в цветовом пространстве YIQ; значение threshold по умолчанию равно 0.2.

      • maxDiffPixels number (необязательно)

        Допустимое количество пикселей, которые могут отличаться; по умолчанию не задано.

      • maxDiffPixelRatio number (необязательно)

        Допустимая доля отличающихся пикселей от общего количества пикселей в диапазоне от 0 до 1; по умолчанию не задана.

      • animations "allow" | "disabled" (необязательно)

        См. параметр animations метода page.screenshot(). По умолчанию — "disabled".

      • caret "hide" | "initial" (необязательно)

        См. параметр caret метода page.screenshot(). По умолчанию — "hide".

      • scale "css" | "device" (необязательно)

        См. параметр scale метода page.screenshot(). По умолчанию — "css".

      • stylePath string | Array<string> (необязательно)

        См. параметр style метода page.screenshot().

      • pathTemplate string (необязательно)

        Шаблон, определяющий расположение снимков экрана. Подробнее см. testProject.snapshotPathTemplate.

      • timeout number (необязательно)

        Тайм-аут по умолчанию для expect(page).toHaveScreenshot() в миллисекундах; по умолчанию используется глобальный тайм-аут expect. Значение 0 отключает тайм-аут.

      Конфигурация метода expect(page).toHaveScreenshot().

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

      • pathTemplate string (необязательно)

        Шаблон, определяющий расположение снимков доступности. Подробнее см. testProject.snapshotPathTemplate.

      • children "contain" | "equal" | "deep-equal" (необязательно)

        Определяет, как дочерние элементы корня снимка сопоставляются с фактическим деревом доступности. Это эквивалентно добавлению свойства /children в начало каждого шаблона снимка aria. Отдельные снимки могут переопределить это значение, если включат явное свойство /children.

      Конфигурация метода expect(locator).toMatchAriaSnapshot().

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

      • threshold number (необязательно)

        Допустимая воспринимаемая разница в цвете одного и того же пикселя на сравниваемых изображениях: от 0 (строгое сравнение) до 1 (сравнение с допуском). Компаратор "pixelmatch" вычисляет разницу в цветовом пространстве YIQ; значение threshold по умолчанию равно 0.2.

      • maxDiffPixels number (необязательно)

        Допустимое количество пикселей, которые могут отличаться; по умолчанию не задано.

      • maxDiffPixelRatio number (необязательно)

        Допустимая доля отличающихся пикселей от общего количества пикселей в диапазоне от 0 до 1; по умолчанию не задана.

      Конфигурация метода expect(value).toMatchSnapshot().

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

      • timeout number (необязательно)

        Тайм-аут метода toPass в миллисекундах.

      • intervals Array<number> (необязательно)

        Интервалы проверки метода toPass в миллисекундах.

      Конфигурация метода expect(value).toPass().

fullyParallel​

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

С помощью этого параметра можно настроить одновременный запуск всех тестов во всех файлах всего тестового проекта.

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

testProject.fullyParallel

Тип

  • boolean

grep​

Фильтр, запускающий только тесты, заголовки которых соответствуют одному из шаблонов. Например, передача grep: /cart/ должна запускать только тесты, в заголовках которых есть слово "cart". Параметр также доступен глобально и в командной строке с параметром -g. Регулярное выражение проверяется относительно строки, состоящей из имени проекта, имени файла теста, имени test.describe (если есть), имени теста и тегов теста, разделённых пробелами, например chromium my-test.spec.ts my-suite my-test.

Параметр grep также полезен для добавления тегов к тестам.

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

testProject.grep

Тип

  • RegExp | Array<RegExp>

grepInvert​

Фильтр, запускающий только тесты, заголовки которых не соответствуют ни одному из шаблонов. Это противоположно параметру testProject.grep. Параметр также доступен глобально и в командной строке с параметром --grep-invert.

Параметр grepInvert также полезен для добавления тегов к тестам.

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

testProject.grepInvert

Тип

  • RegExp | Array<RegExp>

ignoreSnapshots​

Следует ли пропускать проверки снимков, такие как expect(value).toMatchSnapshot() и await expect(page).toHaveScreenshot().

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

Следующий пример выполняет проверки снимков экрана только в Chromium.

import { defineConfig } from '@playwright/test';

export default defineConfig({
  projects: [
    {
      name: 'chromium',
      use: devices['Desktop Chrome'],
    },
    {
      name: 'firefox',
      use: devices['Desktop Firefox'],
      ignoreSnapshots: true,
    },
    {
      name: 'webkit',
      use: devices['Desktop Safari'],
      ignoreSnapshots: true,
    },
  ],
});

Тип

  • boolean

metadata​

Метаданные, которые будут включены в отчёт о тестировании в формате JSON.

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

testProject.metadata

Тип

  • Metadata

name​

Имя проекта отображается в отчёте и во время выполнения тестов.

предупреждение

Playwright выполняет файл конфигурации несколько раз. Не создавайте в конфигурации динамически изменяющиеся значения.

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

testProject.name

Тип

  • string

outputDir​

Каталог для файлов, создаваемых во время выполнения тестов. По умолчанию — <package.json-directory>/test-results.

Этот каталог очищается при запуске. Для каждого теста создаётся уникальный подкаталог внутри testProject.outputDir, что гарантирует отсутствие конфликтов между тестами, выполняющимися параллельно. Доступ к этому каталогу можно получить через testInfo.outputDir и testInfo.outputPath().

Ниже приведён пример создания временного файла с помощью testInfo.outputPath().

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

test('example test', async ({}, testInfo) => {
  const file = testInfo.outputPath('temporary-file.txt');
  await fs.promises.writeFile(file, 'Put some data to the file', 'utf8');
});

Используйте testConfig.outputDir, чтобы изменить этот параметр для всех проектов.

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

testProject.outputDir

Тип

  • string

repeatEach​

Количество повторных запусков каждого теста; полезно для отладки нестабильных тестов.

Используйте testConfig.repeatEach, чтобы изменить этот параметр для всех проектов.

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

testProject.repeatEach

Тип

  • number

respectGitIgnore​

Следует ли пропускать записи из .gitignore при поиске файлов тестов. По умолчанию, если ни testConfig.testDir, ни testProject.testDir не указаны явно, Playwright игнорирует все файлы тестов, соответствующие записям .gitignore. Этот параметр позволяет переопределить такое поведение.

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

testProject.respectGitIgnore

Тип

  • boolean

retries​

Максимальное количество повторных попыток для неудачных тестов. Подробнее см. повторные запуски тестов.

Используйте test.describe.configure(), чтобы изменить количество повторных попыток для конкретного файла или группы тестов.

Используйте testConfig.retries, чтобы изменить этот параметр для всех проектов.

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

testProject.retries

Тип

  • number

snapshotDir​

Базовый каталог относительно файла конфигурации для файлов снимков, созданных с помощью toMatchSnapshot. По умолчанию используется testProject.testDir.

Доступ к каталогу каждого теста можно получить через testInfo.snapshotDir и testInfo.snapshotPath().

Этот путь будет служить базовым каталогом для каталога снимков каждого файла теста. Если задать snapshotDir равным 'snapshots', значение testInfo.snapshotDir будет разрешаться в snapshots/a.spec.js-snapshots.

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

testProject.snapshotDir

Тип

  • string

snapshotPathTemplate​

Этот параметр задаёт шаблон, определяющий расположение снимков, создаваемых с помощью expect(page).toHaveScreenshot(), expect(locator).toMatchAriaSnapshot() и expect(value).toMatchSnapshot().

Шаблоны для каждой проверки можно настроить отдельно в testConfig.expect.

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

import { defineConfig } from '@playwright/test';

export default defineConfig({
  testDir: './tests',

  // Single template for all assertions
  snapshotPathTemplate: '{testDir}/__screenshots__/{testFilePath}/{arg}{ext}',

  // Assertion-specific templates
  expect: {
    toHaveScreenshot: {
      pathTemplate: '{testDir}/__screenshots__{/projectName}/{testFilePath}/{arg}{ext}',
    },
    toMatchAriaSnapshot: {
      pathTemplate: '{testDir}/__snapshots__/{testFilePath}/{arg}{ext}',
    },
  },
});

Тип

  • string

Подробности

Значение может содержать специальные «токены», которые во время выполнения теста будут заменены фактическими значениями.

Рассмотрим следующую структуру файлов:

playwright.config.ts
tests/
└── page/
    └── page-click.spec.ts

И следующий page-click.spec.ts, использующий вызов toHaveScreenshot():

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

test.describe('suite', () => {
  test('test should work', async ({ page }) => {
    await expect(page).toHaveScreenshot(['foo', 'bar', 'baz.png']);
  });
});

Список поддерживаемых токенов:

  • {arg} — относительный путь к снимку без расширения. Он берётся из аргументов, переданных в toHaveScreenshot(), toMatchAriaSnapshot() или toMatchSnapshot(); если вызов выполнен без аргументов, это будет автоматически созданное имя снимка.
    • Значение: foo/bar/baz
  • {ext} — расширение файла снимка (с точкой в начале).
    • Значение: .png
  • {platform} — значение process.platform.
  • {projectName} — имя проекта, очищенное для использования в файловой системе, если оно задано.
    • Значение: '' (пустая строка).
  • {snapshotDir} — testProject.snapshotDir проекта.
    • Значение: /home/playwright/tests (поскольку snapshotDir не указан в конфигурации, по умолчанию используется testDir)
  • {testDir} — testProject.testDir проекта.
    • Значение: /home/playwright/tests (абсолютный путь, поскольку testDir разрешается относительно каталога с файлом конфигурации)
  • {testFileDir} — каталоги в относительном пути от testDir до файла теста.
    • Значение: page
  • {testFileBaseName} — имя файла теста без последнего расширения.
    • Значение: page-click.spec
  • {testFileName} — имя файла теста с расширением.
    • Значение: page-click.spec.ts
  • {testFilePath} — относительный путь от testDir до файла теста.
    • Значение: page/page-click.spec.ts
  • {testName} — заголовок теста, включая описания родительских блоков, но без имени файла; символы очищены для использования в файловой системе.
    • Значение: suite-test-should-work

Перед каждым токеном можно указать один символ, который будет использоваться только если этот токен имеет непустое значение.

Рассмотрим следующую конфигурацию:

import { defineConfig } from '@playwright/test';

export default defineConfig({
  snapshotPathTemplate: '__screenshots__{/projectName}/{testFilePath}/{arg}{ext}',
  testMatch: 'example.spec.ts',
  projects: [
    { use: { browserName: 'firefox' } },
    { name: 'chromium', use: { browserName: 'chromium' } },
  ],
});

В этой конфигурации:

  1. У первого проекта нет имени, поэтому его снимки будут сохранены в <configDir>/__screenshots__/example.spec.ts/....
  2. У второго проекта есть имя, поэтому его снимки будут сохранены в <configDir>/__screenshots__/chromium/example.spec.ts/...
  3. Поскольку snapshotPathTemplate разрешается в относительный путь, он будет разрешён относительно configDir.
  4. Косые черты "/" можно использовать в качестве разделителей путей на любой платформе.

teardown​

Имя проекта, который должен запускаться после завершения этого проекта и всех зависимых от него проектов. Завершающая настройка полезна для очистки ресурсов, выделенных этим проектом.

Передача аргумента --no-deps игнорирует testProject.teardown и ведёт себя так, как если бы он не был указан.

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

Распространённый шаблон — зависимость «setup» с соответствующим ей «teardown»:

import { defineConfig } from '@playwright/test';

export default defineConfig({
  projects: [
    {
      name: 'setup',
      testMatch: /global.setup\.ts/,
      teardown: 'teardown',
    },
    {
      name: 'teardown',
      testMatch: /global.teardown\.ts/,
    },
    {
      name: 'chromium',
      use: devices['Desktop Chrome'],
      dependencies: ['setup'],
    },
    {
      name: 'firefox',
      use: devices['Desktop Firefox'],
      dependencies: ['setup'],
    },
    {
      name: 'webkit',
      use: devices['Desktop Safari'],
      dependencies: ['setup'],
    },
  ],
});

Тип

  • string

testDir​

Каталог, в котором рекурсивно выполняется поиск файлов тестов. По умолчанию используется каталог файла конфигурации.

Для каждого проекта можно указать отдельный каталог. Ниже приведён пример, в котором smoke-тесты запускаются в трёх браузерах, а все остальные тесты — в стабильной версии браузера Chrome.

import { defineConfig } from '@playwright/test';

export default defineConfig({
  projects: [
    {
      name: 'Smoke Chromium',
      testDir: './smoke-tests',
      use: {
        browserName: 'chromium',
      }
    },
    {
      name: 'Smoke WebKit',
      testDir: './smoke-tests',
      use: {
        browserName: 'webkit',
      }
    },
    {
      name: 'Smoke Firefox',
      testDir: './smoke-tests',
      use: {
        browserName: 'firefox',
      }
    },
    {
      name: 'Chrome Stable',
      testDir: './',
      use: {
        browserName: 'chromium',
        channel: 'chrome',
      }
    },
  ],
});

Используйте testConfig.testDir, чтобы изменить этот параметр для всех проектов.

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

testProject.testDir

Тип

  • string

testIgnore​

Файлы, соответствующие одному из этих шаблонов, не запускаются как файлы тестов. Сопоставление выполняется по абсолютному пути к файлу. Строки интерпретируются как шаблоны glob.

Например, '**/test-assets/**' позволит игнорировать все файлы в каталоге test-assets.

Используйте testConfig.testIgnore, чтобы изменить этот параметр для всех проектов.

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

testProject.testIgnore

Тип

  • string | RegExp | Array<string | RegExp>

testMatch​

Как файлы тестов запускаются только файлы, соответствующие одному из этих шаблонов. Сопоставление выполняется по абсолютному пути к файлу. Строки интерпретируются как шаблоны glob.

По умолчанию Playwright ищет файлы, соответствующие следующему шаблону glob: **/*.@(spec|test).?(c|m)[jt]s?(x). Это означает файлы JavaScript или TypeScript с суффиксом ".test" или ".spec", например login-screen.wrong-credentials.spec.ts.

Используйте testConfig.testMatch, чтобы изменить этот параметр для всех проектов.

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

testProject.testMatch

Тип

  • string | RegExp | Array<string | RegExp>

timeout​

Тайм-аут для каждого теста в миллисекундах. По умолчанию — 30 секунд.

Это базовый тайм-аут для всех тестов. Для каждого теста можно настроить собственный тайм-аут с помощью test.setTimeout(). Для каждого файла или группы тестов можно настроить тайм-аут с помощью test.describe.configure().

Используйте testConfig.timeout, чтобы изменить этот параметр для всех проектов.

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

testProject.timeout

Тип

  • number

use​

Параметры для всех тестов этого проекта, например testOptions.browserName. Подробнее см. настройку конфигурации и доступные параметры.

import { defineConfig } from '@playwright/test';

export default defineConfig({
  projects: [
    {
      name: 'Chromium',
      use: {
        browserName: 'chromium',
      },
    },
  ],
});

Используйте testConfig.use, чтобы изменить этот параметр для всех проектов.

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

testProject.use

Тип

  • TestOptions

workers​

Максимальное количество параллельно работающих процессов-исполнителей, используемых для параллельного запуска тестов этого проекта. Также можно задать в процентах от количества логических ядер ЦП, например '50%'.

Это может быть полезно, например, если все тесты проекта используют общий ресурс, такой как тестовая учётная запись, и поэтому не могут выполняться параллельно. Ограничение количества исполнителей до одного для такого проекта предотвратит одновременное использование общего ресурса.

Обратите внимание, что глобальное ограничение testConfig.workers применяется к общему количеству процессов-исполнителей. Однако Playwright ограничит количество исполнителей, используемых для этого проекта, значением testProject.workers.

По умолчанию для каждого проекта ограничение не установлено. Значение общего ограничения на количество исполнителей по умолчанию см. в разделе testConfig.workers.

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

import { defineConfig } from '@playwright/test';

export default defineConfig({
  workers: 10,  // total workers limit

  projects: [
    {
      name: 'runs in parallel',
    },
    {
      name: 'one at a time',
      workers: 1,  // workers limit for this project
    },
  ],
});

Тип

  • number | string

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

Spec-Zone.ru

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