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
追加バージョン: 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.10expect
アサーションライブラリの構成。
testConfig.expectを使用して、すべてのプロジェクトでこのオプションを変更します。
使用方法
testProject.expect
型
- オブジェクト
-
timeout
number (オプション)非同期expectマッチャーのデフォルトタイムアウト(ミリ秒)。デフォルトは5000ms。
-
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を参照してください。
-
-
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.10Playwright Testは、テストを並行して実行します。それを実現するために、同時に実行される複数のワーカープロセスを実行します。デフォルトでは、テストファイルは並行して実行されます。単一ファイル内のテストは、同じワーカープロセス内で順番に実行されます。
このオプションを使用すると、テストプロジェクト全体で、すべてのファイル内のすべてのテストを同時に実行するように構成できます。
使用方法
testProject.fullyParallel
型
grep
追加バージョン: v1.10タイトルがパターンの1つに一致するテストのみを実行するようにフィルタリングします。たとえば、grep: /cart/
を渡すと、タイトルに「cart」が含まれるテストのみが実行されます。グローバルおよびコマンドラインでも-g
オプションで使用できます。正規表現は、プロジェクト名、テストファイル名、test.describe
名(存在する場合)、テスト名、およびテストタグをスペースで区切った文字列(例:chromium my-test.spec.ts my-suite my-test
)に対してテストされます。
grep
オプションは、テストのタグ付けにも役立ちます。
使用方法
testProject.grep
型
grepInvert
追加バージョン: v1.10タイトルがパターンの1つに一致しないテストのみを実行するようにフィルタリングします。これは、testProject.grepの反対です。グローバルおよびコマンドラインでも--grep-invert
オプションで使用できます。
grepInvert
オプションは、テストのタグ付けにも役立ちます。
使用方法
testProject.grepInvert
型
ignoreSnapshots
追加バージョン: v1.44expect(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.10toMatchSnapshot
で作成されたスナップショットファイルの構成ファイルに対する相対的なベースディレクトリ。デフォルトは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',
// 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}',
},
},
});
型
詳細
値には、テスト実行中に実際の値に置き換えられるいくつかの「トークン」が含まれる場合があります。
次のファイル構造を検討してください
playwright.config.ts
tests/
└── page/
└── 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}
- ファイル名をを除く、親のdescribeを含むファイルシステムサニタイズされたテストタイトル。- 値:
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/...
に保存されます。 - 2番目のプロジェクトには名前があるため、そのスナップショットは
<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テストファイルが再帰的にスキャンされるディレクトリ。デフォルトは構成ファイルのディレクトリです。
各プロジェクトは異なるディレクトリを使用できます。以下は、スモークテストを3つのブラウザーで実行し、他のすべてのテストを安定した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これらのパターンの1つに一致するファイルは、テストファイルとして実行されません。マッチングは、絶対ファイルパスに対して実行されます。文字列はグロブパターンとして扱われます。
たとえば、'**/test-assets/**'
は、test-assets
ディレクトリ内のファイルをすべて無視します。
testConfig.testIgnoreを使用して、すべてのプロジェクトでこのオプションを変更します。
使用方法
testProject.testIgnore
型
testMatch
追加バージョン: v1.10これらのパターンの1つに一致するファイルのみが、テストファイルとして実行されます。マッチングは、絶対ファイルパスに対して実行されます。文字列はグロブパターンとして扱われます。
デフォルトでは、Playwrightは次のグロブパターンに一致するファイルを検索します:**/*.@(spec|test).?(c|m)[jt]s?(x)
。これは、".test"
または".spec"
サフィックスを持つJavaScriptまたはTypeScriptファイル、たとえば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
型