Optional
dependenciesOptional
expectConfiguration for the expect
assertion library.
Use testConfig.expect to change this option for all projects.
Optional
timeout?: numberDefault timeout for async expect matchers in milliseconds, defaults to 5000ms.
Optional
toConfiguration for the expect(page).toHaveScreenshot(name[, options]) method.
Optional
animations?: "disabled" | "allow"See animations
in page.screenshot([options]).
Defaults to "disabled"
.
Optional
caret?: "initial" | "hide"See caret
in page.screenshot([options]). Defaults
to "hide"
.
Optional
maxan acceptable ratio of pixels that are different to the total amount of pixels, between 0
and 1
, unset by
default.
Optional
maxan acceptable amount of pixels that could be different, unset by default.
Optional
scale?: "css" | "device"See scale
in page.screenshot([options]). Defaults
to "css"
.
Optional
styleSee style
in page.screenshot([options]).
Optional
threshold?: numberan acceptable perceived color difference between the same pixel in compared images, ranging from 0
(strict) and
1
(lax). "pixelmatch"
comparator computes color difference in
YIQ color space and defaults threshold
value to 0.2
.
Optional
toConfiguration for the expect(value).toMatchSnapshot(name[, options]) method.
Optional
maxan acceptable ratio of pixels that are different to the total amount of pixels, between 0
and 1
, unset by
default.
Optional
maxan acceptable amount of pixels that could be different, unset by default.
Optional
threshold?: numberan acceptable perceived color difference between the same pixel in compared images, ranging from 0
(strict) and
1
(lax). "pixelmatch"
comparator computes color difference in
YIQ color space and defaults threshold
value to 0.2
.
Optional
toConfiguration for the expect(value).toPass() method.
Optional
intervals?: number[]probe intervals for toPass method in milliseconds.
Optional
timeout?: numbertimeout for toPass method in milliseconds.
Optional
fullyPlaywright Test runs tests in parallel. In order to achieve that, it runs several worker processes that run at the same time. By default, test files are run in parallel. Tests in a single file are run in order, in the same worker process.
You can configure entire test project to concurrently run all tests in all files using this option.
Optional
grepFilter to only run tests with a title matching one of the patterns. For example, passing grep: /cart/
should only
run tests with "cart" in the title. Also available globally and in the command line with the -g
option. The regular expression will be tested against the string that consists of the test file name,
test.describe
name (if any) and the test name divided by spaces, e.g. my-test.spec.ts my-suite my-test
.
grep
option is also useful for tagging tests.
Optional
grepFilter to only run tests with a title not matching one of the patterns. This is the opposite of
testProject.grep. Also available globally
and in the command line with the --grep-invert
option.
grepInvert
option is also useful for tagging tests.
Optional
ignoreWhether to skip snapshot expectations, such as expect(value).toMatchSnapshot()
and await expect(page).toHaveScreenshot()
.
Usage
The following example will only perform screenshot assertions on 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,
},
],
});
Optional
metadataMetadata that will be put directly to the test report serialized as JSON.
Optional
nameProject name is visible in the report and during test execution.
Optional
outputThe output directory for files created during test execution. Defaults to <package.json-directory>/test-results
.
This directory is cleaned at the start. When running a test, a unique subdirectory inside the testProject.outputDir is created, guaranteeing that test running in parallel do not conflict. This directory can be accessed by testInfo.outputDir and testInfo.outputPath(...pathSegments).
Here is an example that uses testInfo.outputPath(...pathSegments) to create a temporary file.
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');
});
Use testConfig.outputDir to change this option for all projects.
Optional
repeatThe number of times to repeat each test, useful for debugging flaky tests.
Use testConfig.repeatEach to change this option for all projects.
Optional
retriesThe maximum number of retry attempts given to failed tests. Learn more about test retries.
Use test.describe.configure([options]) to change the number of retries for a specific file or a group of tests.
Use testConfig.retries to change this option for all projects.
Optional
snapshotThe base directory, relative to the config file, for snapshot files created with toMatchSnapshot
. Defaults to
testProject.testDir.
The directory for each test can be accessed by testInfo.snapshotDir and testInfo.snapshotPath(...pathSegments).
This path will serve as the base directory for each test file snapshot directory. Setting snapshotDir
to
'snapshots'
, the testInfo.snapshotDir
would resolve to snapshots/a.spec.js-snapshots
.
Optional
snapshotThis option configures a template controlling location of snapshots generated by expect(page).toHaveScreenshot(name[, options]) and expect(value).toMatchSnapshot(name[, options]).
Usage
// playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './tests',
snapshotPathTemplate: '{testDir}/__screenshots__/{testFilePath}/{arg}{ext}',
});
Details
The value might include some "tokens" that will be replaced with actual values during test execution.
Consider the following file structure:
playwright.config.ts
tests/
└── page/
└── page-click.spec.ts
And the following page-click.spec.ts
that uses toHaveScreenshot()
call:
// 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']);
});
});
The list of supported tokens:
{arg}
- Relative snapshot path without extension. These come from the arguments passed to the
toHaveScreenshot()
and toMatchSnapshot()
calls; if called without arguments, this will be an auto-generated
snapshot name.foo/bar/baz
{ext}
- snapshot extension (with dots).png
{platform}
- The value of process.platform
.{projectName}
- Project's file-system-sanitized name, if any.''
(empty string).{snapshotDir}
- Project's
testConfig.snapshotDir./home/playwright/tests
(since snapshotDir
is not provided in config, it defaults to testDir
){testDir}
- Project's
testConfig.testDir./home/playwright/tests
(absolute path is since testDir
is resolved relative to directory with
config){testFileDir}
- Directories in relative path from testDir
to test file.page
{testFileName}
- Test file name with extension.page-click.spec.ts
{testFilePath}
- Relative path from testDir
to test filepage/page-click.spec.ts
{testName}
- File-system-sanitized test title, including parent describes but excluding file name.suite-test-should-work
Each token can be preceded with a single character that will be used only if this token has non-empty value.
Consider the following config:
// 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' } },
],
});
In this config:
<configDir>/__screenshots__/example.spec.ts/...
.<configDir>/__screenshots__/chromium/example.spec.ts/..
.snapshotPathTemplate
resolves to relative path, it will be resolved relative to configDir
."/"
can be used as path separators on any platform.Optional
teardownName of a project that needs to run after this and all dependent projects have finished. Teardown is useful to cleanup any resources acquired by this project.
Passing --no-deps
argument ignores
testProject.teardown and behaves as if
it was not specified.
Usage
A common pattern is a "setup" dependency that has a corresponding "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'],
},
],
});
Optional
testDirectory that will be recursively scanned for test files. Defaults to the directory of the configuration file.
Each project can use a different directory. Here is an example that runs smoke tests in three browsers and all other tests in stable Chrome browser.
// 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',
}
},
],
});
Use testConfig.testDir to change this option for all projects.
Optional
testFiles matching one of these patterns are not executed as test files. Matching is performed against the absolute file path. Strings are treated as glob patterns.
For example, '**/test-assets/**'
will ignore any files in the test-assets
directory.
Use testConfig.testIgnore to change this option for all projects.
Optional
testOnly the files matching one of these patterns are executed as test files. Matching is performed against the absolute file path. Strings are treated as glob patterns.
By default, Playwright looks for files matching the following glob pattern: **/*.@(spec|test).?(c|m)[jt]s?(x)
.
This means JavaScript or TypeScript files with ".test"
or ".spec"
suffix, for example
login-screen.wrong-credentials.spec.ts
.
Use testConfig.testMatch to change this option for all projects.
Optional
timeoutTimeout for each test in milliseconds. Defaults to 30 seconds.
This is a base timeout for all tests. Each test can configure its own timeout with test.setTimeout(timeout). Each file or a group of tests can configure the timeout with test.describe.configure([options]).
Use testConfig.timeout to change this option for all projects.
Optional
useOptions for all tests in this project, for example testOptions.browserName. Learn more about configuration and see [available options]TestOptions.
// playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'Chromium',
use: {
browserName: 'chromium',
},
},
],
});
Use testConfig.use to change this option for all projects.
Generated using TypeDoc
List of projects that need to run before any test in this project runs. Dependencies can be useful for configuring the global setup actions in a way that every action is in a form of a test. Passing
--no-deps
argument ignores the dependencies and behaves as if they were not specified.Using dependencies allows global setup to produce traces and other artifacts, see the setup steps in the test report, etc.
Usage