Open12

Playwright のドキュメントを読む

akihisa1210akihisa1210

まずは Getting started を一通りやってみます。ドキュメントは 1.17 系のものを参照。
https://playwright.dev/docs/intro

Playwright can either be used as a part of the Playwright Test test runner (this guide), or as a Playwright Library.

PlayWright は PlayWright Test テストランナーとしても使えるし、PlayWright Library としても使えるとのこと。ライブラリのドキュメントは後で出てくるので一旦テストランナーとしての使い方を学ぼう。

PlayWright Test でできることは以下の通り。

Run tests across all browsers.
Execute tests in parallel.
Enjoy context isolation out of the box.
Capture videos, screenshots and other artifacts on failure.
Integrate your POMs as extensible fixtures.

3点目と5点目は現段階ではよくわからない。

akihisa1210akihisa1210

Getting Started - Installation
https://playwright.dev/docs/intro#installation

PlayWright のテストランナー、PlayWright Test をインストールする。

npm init
npm i -D @playwright/test
npx playwright install

npx playwright install でブラウザがインストールされる。
デフォルトでは Chromium、FFmpeg(ブラウザではないが、Chromium の依存関係として)、Firefox、WebKit がインストールされる。
デフォルトのインストール対象はここで typebrowser になっているもの。
https://github.com/microsoft/playwright/blob/b5933db2794af34c961ca3327a88fc2e2f130aaf/packages/playwright-core/src/utils/registry.ts#L286-L449

インストールされるブラウザのバージョンはここで定義されている。
https://github.com/microsoft/playwright/blob/b5933db2794af34c961ca3327a88fc2e2f130aaf/packages/playwright-core/browsers.json

インストール処理本体はこのあたり。
https://github.com/microsoft/playwright/blob/b5933db2794af34c961ca3327a88fc2e2f130aaf/packages/playwright-core/src/utils/browserFetcher.ts#L25

特定のブラウザのみをインストールすることもできる。

npx playwright install chromium
akihisa1210akihisa1210

Getting Started - First test
https://playwright.dev/docs/intro#first-test

tests/example.spec.ts を作成して、npx playwright test でテストを実行できる。
TypeScript 導入のための設定は特に不要。また、テスト用の設定ファイルも不要。

デフォルトではテストはヘッドレスで動く。テスト実行状況を見たい場合は npx playwright test --headed とすればよい。

akihisa1210akihisa1210

Getting Started - Configuration file
https://playwright.dev/docs/intro#configuration-file

設定ファイルの例。ここでは projects を設定して、Chromium、Firefox、WebKit の3ブラウザでテストを流している。
(WebKit でのテスト実行はエラーになったが、これは Ubuntu 22.04 で検証しているせい。)

他の設定項目の内容は以下の通り。

  • forbidOnly: !!process.env.CI: CI 環境の場合、いずれかのテストで test.only が指定されていたときにエラーにする。
  • retries: process.env.CI ? 2 : 0: リトライ回数。CI 環境の場合は2回、それ以外の場合はリトライしない。
  • use: { trace: 'on-first-retry', }: use には PlayWright のグローバルな設定を書く。trace: 'on-first-retry' は、テストの初回リトライ時にトレースを保存する。トレースは GUI のビューワーで閲覧できる。

設定ファイルの型が提供されているはありがたい。

akihisa1210akihisa1210

Getting Started - Writing assertions
https://playwright.dev/docs/intro#writing-assertions

アサーションには Jest の expect ライブラリを PlayWright 特有のマッチャーで拡張したものが使われているとのこと。
https://jestjs.io/docs/expect

例のテストでは、ページのタイトルを検証する toHaveTitle()、要素の属性を検証する toHaveAttribute()、要素が見えていることを検証する toBeVisible() が使われている。
いずれも Jest の expect には存在しないもの。

akihisa1210akihisa1210

Getting Started - Using test fixtures
https://playwright.dev/docs/intro#using-test-fixtures

これまでの例でも出てきたテスト用のコールバック関数の引数 { page } は fixtures と呼ばれるものらしい。

test('basic test', async ({ page }) => {
  ...

フィクスチャはテスト実行ごとに作成されるオブジェクト。デフォルトで用意されているフィクスチャもあるし、自分でフィクスチャを作成して追加することもできる。

デフォルトで用意されているフィクスチャのうち、代表的なものは以下の通り。

  • page: このテストが実行されているページ。
  • context: テストが実行される独立したコンテキスト。page フィクスチャもこのフィクスチャに属する。
  • browser: リソース最適化のためにブラウザはテスト間で使い回されるとのこと。
  • browserName: テストで実行されているブラウザ名。
akihisa1210akihisa1210

Getting Started - Using test hooks
https://playwright.dev/docs/intro#using-test-hooks

全てのテストの実行前(実行後)に実行される test.beforeAlltest.afterAll)と、個々のテストの実行前(実行後)に実行される test.beforeEachtest.afterEach)。
test.beforeAlltest.afterAll)が単に beforeafter)となっているテストフレームワークもあるけど、all がついている方が意味が明示的でよいですね。

akihisa1210akihisa1210

Getting Started - Command line
https://playwright.dev/docs/intro#command-line

よく使われる(CLI の)コマンドの一覧。ここでは気になったものを書きとめておく。

test の後にパス以外の文字列を指定すると、全てのファイルのうちその文字列を含むファイルのみを実行する。

npx playwright test my-spec my-spec-2

テスト名(ファイル名ではなく)を指定してテストを実行できる。

npx playwright test -g "add a todo item"

PlayWright Inspector を使ってテストをステップ実行できる。これは便利。

npx playwright test --debug