MRが楽しい

MRやVRについて学習したことを書き残す

AWESOME-COPILOTのドキュメントを読む その104(Playwright Typescript)

本日はAWESOME-COPILOTの技術調査枠です。
AWESOME-COPILOTのドキュメントを読みながら実際に操作を試して記事に残します。
今回はカスタムインストラクションの一つPlaywright Typescriptについてです。

Playwright Typescript

Playwright TypescriptはPlaywrightで高品質なE2Eテストを生成するためのルールです。
PlaywrightはWebアプリケーションの E2E(エンドツーエンド)テスト を自動化するためのツールです。
ユーザーの操作をブラウザ上で再現してテストすることができます。

以下のページからGenaiscriptのインストールボタンをクリックして取得します。
github.com

インストールボタンを押してPlaywright Typescriptダウンロードします。
すると.github/instructions配下にインストラクションがインストールされます。

インストールしたインストラクションはCopilotの動作に自動的に適用されます。
このインストラクションを読み込むと、CopilotはPlaywrightのベストプラクティスに従いTypeScriptテストコードを生成するようになります。

以下の要素に効くインストラクションです。

  • TypeScript / JavaScript
  • Playwright Test Runner
  • フロントエンドE2Eテスト

具体的にはCopilotは以下のような行動をとります。

ロケーターはユーザー視点を優先する。

CopilotはCSSセレクタやXPath中心ではなくrole/label/textベースを優先します。
例えば以下のようなコードです。

Page.GetByRole(AriaRole.Button, new() { Name = "Save" })
Page.GetByLabel("Email")
Page.GetByText("Welcome")

test.step() で操作を分ける

Copilotは操作を以下のように意味のある単位に分けます。

await test.step('ログイン操作', async () => {
  ...
});

これによりテストレポートが読みやすくなり、失敗箇所も分かりやすくなります。

auto-retry assertion を使う

Copilotは即時評価や手動waitではなくPlaywrightの自動リトライ付きassertionを使います。
例えば以下のようなコードです。

await expect(locator).toHaveText('Success');

要素が表示されるまで自然に待ってくれるため、テストが安定します。

固定waitを避ける

Copilotは以下のような固定waitを避けます。

await Page.WaitForTimeoutAsync(3000);

テスト構造は test.describe() ベースにする

Copilotは次の構造を生成します。

test.describe('Feature', () => {
  test.beforeEach(...)
  test('scenario', async () => {})
});

テスト名とステップ名を説明的にする

CopilotはSearchForMovieByTitleのようなテスト名を付けます。
これによりテストの意図が読み取れるようになります。

ファイル構成ルール

Copilotは以下のファイル構成を守ります👇

tests/
 ├ login.spec.ts
 ├ search.spec.ts

以下の命名ルールで1ファイル = 1機能で作成します。

<feature>.spec.ts

assertionの使い分け

Copilotは目的に応じて以下のassertionを使い分けます。

用途 メソッド
UI構造 toMatchAriaSnapshot
要素数 toHaveCount
完全一致 toHaveText
部分一致 toContainText
URL確認 toHaveURL

実行・失敗分析・改善の流れを前提にする

Copilotはテスト生成後も次の流れを意識します。

実行
↓
失敗原因分析
↓
locator / assertion修正
↓
再実行

アンチパターンを避ける

Copilotは以下のアンチパターンを避けます。

  • 固定wait
  • 脆いCSSセレクタ
  • 不必要な可視性チェック
  • 曖昧なロケーター
  • 意図が不明なテスト名
  • 意味のないassertion