Skip to main content

TestProject

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

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

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

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

export default defineConfig({
// Опции, общие для всех проектов.
timeout: 30000,
use: {
ignoreHTTPSErrors: true,
},

// Опции, специфичные для каждого проекта.
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

Добавлено в: v1.31 testProject.dependencies

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

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

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

playwright.config.ts
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

Добавлено в: v1.10 testProject.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 для деталей.

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

    • toMatchAriaSnapshot [Object] (опционально)

      • pathTemplate [string] (опционально)

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

      Конфигурация для метода 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

Добавлено в: v1.10 testProject.fullyParallel

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

Вы можете настроить весь тестовый проект на одновременное выполнение всех тестов во всех файлах, используя эту опцию.

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

testProject.fullyParallel

Тип

  • [boolean]

grep

Добавлено в: v1.10 testProject.grep

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

Опция grep также полезна для тегирования тестов.

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

testProject.grep

Тип

  • [RegExp] | [Array]<[RegExp]>

grepInvert

Добавлено в: v1.10 testProject.grepInvert

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

Опция grepInvert также полезна для тегирования тестов.

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

testProject.grepInvert

Тип

  • [RegExp] | [Array]<[RegExp]>

ignoreSnapshots

Добавлено в: v1.44 testProject.ignoreSnapshots

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

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

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

playwright.config.ts
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

Добавлено в: v1.10 testProject.metadata

Метаданные, которые будут помещены непосредственно в отчет о тестировании, сериализованный как JSON.

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

testProject.metadata

Тип

  • [Metadata]

name

Добавлено в: v1.10 testProject.name

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

warning

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

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

testProject.name

Тип

  • [string]

outputDir

Добавлено в: v1.10 testProject.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

Добавлено в: v1.10 testProject.repeatEach

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

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

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

testProject.repeatEach

Тип

  • [number]

respectGitIgnore

Добавлено в: v1.45 testProject.respectGitIgnore

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

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

testProject.respectGitIgnore

Тип

  • [boolean]

retries

Добавлено в: v1.10 testProject.retries

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

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

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

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

testProject.retries

Тип

  • [number]

snapshotDir

Добавлено в: v1.10 testProject.snapshotDir

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

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

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

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

testProject.snapshotDir

Тип

  • [string]

snapshotPathTemplate

Добавлено в: v1.28 testProject.snapshotPathTemplate

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

Вы можете настроить шаблоны для каждого утверждения отдельно в testConfig.expect.

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

playwright.config.ts
import { defineConfig } from '@playwright/test';

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

// Единый шаблон для всех утверждений
snapshotPathTemplate: '{testDir}/__screenshots__/{testFilePath}/{arg}{ext}',

// Шаблоны, специфичные для утверждений
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():

page-click.spec.ts
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
  • {testFileName} - Имя тестового файла с расширением.
    • Значение: page-click.spec.ts
  • {testFilePath} - Относительный путь от testDir до тестового файла.
    • Значение: page/page-click.spec.ts
  • {testName} - Имя теста, безопасное для файловой системы, включая родительские описания, но исключая имя файла.
    • Значение: suite-test-should-work

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

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

playwright.config.ts
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

Добавлено в: v1.34 testProject.teardown

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

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

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

Общая схема - это зависимость "setup", которая имеет соответствующий "teardown":

playwright.config.ts
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

Добавлено в: v1.10 testProject.testDir

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

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

playwright.config.ts
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

Добавлено в: v1.10 testProject.testIgnore

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

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

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

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

testProject.testIgnore

Тип

  • [string] | [RegExp] | [Array]<[string] | [RegExp]>

testMatch

Добавлено в: v1.10 testProject.testMatch

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

По умолчанию Playwright ищет файлы, соответствующие следующему шаблону глоба: **/*.@(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

Добавлено в: v1.10 testProject.timeout

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

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

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

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

testProject.timeout

Тип

  • [number]

use

Добавлено в: v1.10 testProject.use

Опции для всех тестов в этом проекте, например, testOptions.browserName. Узнайте больше о конфигурации и смотрите [доступные опции][TestOptions].

playwright.config.ts
import { defineConfig } from '@playwright/test';

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

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

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

testProject.use

Тип

  • [TestOptions]