TestProject
Playwright Test поддерживает одновременный запуск нескольких тестовых проектов. Это полезно для выполнения тестов в нескольких конфигурациях. Например, рассмотрите возможность запуска тестов в нескольких браузерах. Этот тип описывает формат проекта в файле конфигурации, для доступа к разрешенным параметрам конфигурации во время выполнения используйте FullProject.
TestProject инкапсулирует конфигурацию, специфичную для одного проекта. Проекты настраиваются в testConfig.projects, указанных в файле конфигурации. Обратите внимание, что все свойства TestProject доступны в верхнем уровне TestConfig, в этом случае они общие для всех проектов.
Вот пример конфигурации, которая запускает каждый тест в Chromium, Firefox и WebKit, как в настольных, так и в мобильных версиях.
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Список проектов, которые должны быть выполнены до запуска любого теста в этом проекте. Зависимости могут быть полезны для настройки глобальных действий установки таким образом, чтобы каждое действие было в форме теста. Передача аргумента --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'],
},
],
});
Тип
expect
Добавлено в: v1.10Конфигурация для библиотеки утверждений expect.
Используйте testConfig.expect, чтобы изменить эту опцию для всех проектов.
Использование
testProject.expect
Тип
- Object
-
timeoutnumber (опционально)Тайм-аут по умолчанию для асинхронных сопоставителей expect в миллисекундах, по умолчанию 5000мс.
-
toHaveScreenshotObject (опционально)-
thresholdnumber (опционально)допустимая воспринимаемая разница в цвете между одним и тем же пикселем в сравниваемых изображениях, в диапазоне от
0(строго) до1(мягко). Компаратор"pixelmatch"вычисляет разницу в цвете в цветовом пространстве YIQ и по умолчанию устанавливает значениеthresholdв0.2. -
maxDiffPixelsnumber (опционально)допустимое количество пикселей, которые могут отличаться, по умолчанию не установлено.
-
maxDiffPixelRationumber (опционально)допустимое соотношение пикселей, которые отличаются, к общему количеству пикселей, между
0и1, по умолчанию не установлено. -
animations"allow" | "disabled" (опционально)См. animations в page.screenshot(). По умолчанию
"disabled". -
caret"hide" | "initial" (опционально)См. caret в page.screenshot(). По умолчанию
"hide". -
scale"css" | "device" (опционально)См. scale в page.screenshot(). По умолчанию
"css". -
stylePathstring | Array<string> (опционально)См. style в page.screenshot().
-
pathTemplatestring (опционально)Шаблон, управляющий расположением скриншотов. См. testProject.snapshotPathTemplate для деталей.
Конфигурация для метода expect(page).toHaveScreenshot().
-
-
toMatchAriaSnapshotObject (опционально)-
pathTemplatestring (опционально)Шаблон, управляющий расположением снимков aria. См. testProject.snapshotPathTemplate для деталей.
Конфигурация для метода expect(locator).toMatchAriaSnapshot().
-
-
toMatchSnapshotObject (опционально)-
thresholdnumber (опционально)допустимая воспринимаемая разница в цвете между одним и тем же пикселем в сравниваемых изображениях, в диапазоне от
0(строго) до1(мягко). Компаратор"pixelmatch"вычисляет разницу в цвете в цветовом пространстве YIQ и по умолчанию устанавливает значениеthresholdв0.2. -
maxDiffPixelsnumber (опционально)допустимое количество пикселей, которые могут отличаться, по умолчанию не установлено.
-
maxDiffPixelRationumber (опционально)допустимое соотношение пикселей, которые отличаются, к общему количеству пикселей, между
0и1, по умолчанию не установлено.
Конфигурация для метода expect(value).toMatchSnapshot().
-
-
toPassObject (опционально)-
timeoutnumber (опционально)тайм-аут для метода toPass в миллисекундах.
-
intervalsArray<number> (опционально)интервалы проверки для метода toPass в миллисекундах.
Конфигурация для метода expect(value).toPass().
-
-
fullyParallel
Добавлено в: v1.10Playwright Test выполняет тесты параллельно. Для этого он запускает несколько рабочих процессов, которые выполняются одновременно. По умолчанию тестовые файлы выполняются параллельно. Тесты в одном файле выполняются по порядку, в одном рабочем процессе.
Вы можете настроить весь тестовый проект на одновременное выполнение всех тестов во всех файлах, используя эту опцию.
Использование
testProject.fullyParallel
Тип
grep
Добавлено в: v1.10Фильтр для выполнения только тех тестов, заголовок которых соответствует одному из шаблонов. Например, передача grep: /cart/ должна выполнять только тесты с "cart" в заголовке. Также доступно глобально и в командной строке с опцией -g. Регулярное выражение будет проверяться на строке, состоящей из имени проекта, имени тестового файла, имени test.describe (если есть), имени теста и тегов теста, разделенных пробелами, например, chromium my-test.spec.ts my-suite my-test.
Опция grep также полезна для тегирования тестов.
Использование
testProject.grep
Тип
grepInvert
Добавлено в: v1.10Фильтр для выполнения только тех тестов, заголовок которых не соответствует одному из шаблонов. Это противоположность testProject.grep. Также доступно глобально и в командной строке с опцией --grep-invert.
Опция grepInvert также полезна для тегирования тестов.
Использование
testProject.grepInvert
Тип
ignoreSnapshots
Добавлено в: v1.44Пропускать ли ожидания снимков, такие как 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,
},
],
});
Тип
metadata
Добавлено в: v1.10Метаданные, которые будут помещены непосредственно в отчет о тестировании, сериализованный как JSON.
Использование
testProject.metadata
Тип
name
Добавлено в: v1.10Имя проекта отображается в отчете и во время выполнения теста.
Playwright выполняет файл конфигурации несколько раз. Не создавайте динамически нестабильные значения в вашей конфигурации.
Использование
testProject.name
Тип
outputDir
Добавлено в: v1.10Директория вывода для файлов, созданных во время выполнения теста. По умолчанию <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
Тип
repeatEach
Добавлено в: v1.10Количество повторений каждого теста, полезно для отладки нестабильных тестов.
Используйте testConfig.repeatEach, чтобы изменить эту опцию для всех проектов.
Использование
testProject.repeatEach
Тип
respectGitIgnore
Добавлено в: v1.45Пропускать ли записи из .gitignore при поиске тестовых файлов. По умолчанию, если ни testConfig.testDir, ни testProject.testDir явно не указаны, Playwright будет игнорировать любые тестовые файлы, соответствующие записям .gitignore. Эта опция позволяет переопределить это поведение.
Использование
testProject.respectGitIgnore
Тип
retries
Добавлено в: v1.10Максимальное количество попыток повторного выполнения для неудачных тестов. Узнайте больше о повторных попытках тестов.
Используйте test.describe.configure(), чтобы изменить количество повторных попыток для конкретного файла или группы тестов.
Используйте testConfig.retries, чтобы изменить эту опцию для всех проектов.
Использование
testProject.retries
Тип
snapshotDir
Добавлено в: v1.10Базовая директория, относительно файла конфигурации, для файлов снимков, созданных с помощью toMatchSnapshot. По умолчанию testProject.testDir.
Директория для каждого теста может быть доступна через testInfo.snapshotDir и testInfo.snapshotPath().
Этот путь будет служить базовой директорией для директории снимков каждого тестового файла. Установив snapshotDir в 'snapshots', testInfo.snapshotDir будет разрешаться в snapshots/a.spec.js-snapshots.
Использование
testProject.snapshotDir
Тип
snapshotPathTemplate
Добавлено в: v1.28Эта опция настраивает шаблон, управляющий расположением снимков, создаваемых expect(page).toHaveScreenshot(), expect(locator).toMatchAriaSnapshot() и expect(value).toMatchSnapshot().
Вы можете настроить шаблоны для каждого утверждения отдельно в testConfig.expect.
Использование
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}',
},
},
});
Тип
Детали
Значение может включать некоторые "токены", которые будут заменены фактическими значениями во время выполнения теста.
Рассмотрим следующую структуру файлов:
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
- Значение:
{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' } },
],
});
В этой конфигурации:
- Первый проект не имеет имени, поэтому его снимки будут храниться в
<configDir>/__screenshots__/example.spec.ts/.... - Второй проект имеет имя, поэтому его снимки будут храниться в
<configDir>/__screenshots__/chromium/example.spec.ts/... - Поскольку
snapshotPathTemplateразрешается в относительный путь, он будет разрешаться относительноconfigDir. - Прямые слэши
"/"могут использоваться как разделители путей на любой платформе.
teardown
Добавлено в: v1.34Имя проекта, который должен быть выполнен после завершения этого и всех зависимых проектов. 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'],
},
],
});
Тип
testDir
Добавлено в: v1.10Директория, которая будет рекурсивно сканироваться на наличие тестовых файлов. По умолчанию это директория файла конфигурации.
Каждый проект может использовать другую директорию. Вот пример, который выполняет 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
Тип
testIgnore
Добавлено в: v1.10Файлы, соответствующие одному из этих шаблонов, не выполняются как тестовые файлы. Сопоставление выполняется с абсолютным путем файла. Строки рассматриваются как шаблоны глобов.
Например, '**/test-assets/**' будет игнорировать любые файлы в директории test-assets.
Используйте testConfig.testIgnore, чтобы изменить эту опцию для всех проектов.
Использование
testProject.testIgnore
Тип
testMatch
Добавлено в: v1.10Только файлы, соответствующие одному из этих шаблонов, выполняются как тестовые файлы. Сопоставление выполняется с абсолютным путем файла. Строки рассматриваются как шаблоны глобов.
По умолчанию Playwright ищет файлы, соответствующие следующему шаблону глоба: **/*.@(spec|test).?(c|m)[jt]s?(x). Это означает файлы JavaScript или TypeScript с суффиксом ".test" или ".spec", например, login-screen.wrong-credentials.spec.ts.
Используйте testConfig.testMatch, чтобы изменить эту опцию для всех проектов.
Использование
testProject.testMatch
Тип
timeout
Добавлено в: v1.10Тайм-аут для каждого теста в миллисекундах. По умолчанию 30 секунд.
Это базовый тайм-аут для всех тестов. Каждый тест может настроить свой собственный тайм-аут с помощью test.setTimeout(). Каждый файл или группа тестов может настроить тайм-аут с помощью test.describe.configure().
Используйте testConfig.timeout, чтобы изменить эту опцию для всех проектов.
Использование
testProject.timeout
Тип
use
Добавлено в: v1.10Опции для всех тестов в этом проекте, например, testOptions.browserName. Узнайте больше о конфигурации и смотрите доступные опции.
import { defineConfig } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'Chromium',
use: {
browserName: 'chromium',
},
},
],
});
Используйте testConfig.use, чтобы изменить эту опцию для всех проектов.
Использование
testProject.use
Тип