この記事では、Microsoft Playwright Testing Preview を使用して大規模な Playwright テストを実行するときに発生する可能性がある問題について説明します。
重要
Microsoft Playwright Testing は現在、プレビュー段階です。 ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
テストがエラーで失敗する401 Unauthorized
アクセス トークンが無効であるか、有効期限が切れている可能性があります。 正しいアクセス トークンを使用しているか、新しいアクセス トークンを生成していることを確認します。
テストの実行速度が遅い
Microsoft Playwright Testing は、特定の Azure リージョンでリモート ブラウザーをホストします。 クライアント コンピューターまたはターゲット Web アプリケーションがこれらのリージョン外にある場合は、ネットワーク待ち時間が長くなる可能性があります。 ワークスペースのリージョン待機時間を最適化する方法を確認してください。
テストがハングしているように見える
テストの実行が意図せず一時停止したコードが原因で、テストがハングする可能性があります。 たとえば、テストのデバッグ中に pause ステートメントを追加したとします。
コード内のステートメントの pause()
インスタンスを検索し、コメント アウトします。
タイムアウトが原因でテストが失敗する
次の理由により、テストがタイムアウトになる可能性があります。
クライアント コンピューターがブラウザーとは異なるリージョンにあります。
サービスでホストされるブラウザーに接続すると、ネットワーク待機時間が発生します。 Playwright 構成でタイムアウト設定を増やす必要がある場合があります。 でテストタイムアウト設定を増やすことから
playwright.service.config.ts
始めます。トレース ファイルはパフォーマンスの問題を引き起こします (現在、既知の問題)。
Playwright トレース ファイルをサービスからクライアント コンピューターに送信すると、輻輳が発生し、タイムアウトが原因でテストが失敗する可能性があります。Playwright 構成ファイルでトレースを無効にすることができます。
ファイアウォールの内側でホストされている Web アプリケーションをテストできない
ファイル内のオプションをexposeNetwork
playwright.service.config.ts
設定して、クライアント コンピューターでクラウド ブラウザーでネットワークを使用できるようにします。 このオプションの値の例は <loopback>
、localhost ネットワークの場合、 *
すべてのネットワークを公開する場合、またはアプリケーション エンドポイントの IP アドレス/DNS です。
ローカルにデプロイされたアプリケーションをテストする 方法の詳細について説明します。
ブラウザーに表示される時刻がローカル時刻と異なる
Web アプリケーションでは、多くの場合、ユーザーの場所に基づいて時刻が表示されます。 Microsoft Playwright Testing を使用してテストを実行すると、クライアント コンピューターとサービス ブラウザーが異なるリージョンにある可能性があります。
Playwright 構成ファイルでタイム ゾーンを指定することで、問題を軽減できます。
でテストが失敗する Path is not available when connecting remotely
Microsoft Playwright Testing を Path is not available when connecting remotely
使用してリモート ブラウザーで Playwright テストを実行すると、エラーが発生する可能性があります。 たとえば、テスト コードでファイルをダウンロードする機能をテストする場合などです。
この問題の原因は、 path()
リモート ブラウザーで実行すると、ダウンロード ファイル インスタンスの関数が使用できないということです。
この問題を解決するには、この関数を saveAs()
使用して、クライアント コンピューターにファイルのローカル コピーを保存する必要があります。 ダウンロードの詳細 については、Playwright のドキュメントを参照してください。
次のコード スニペットは、ダウンロードしたファイルの内容を読み取る代わりにpath()
使用saveAs()
する方法の例を示しています。
const downloadPromise = page.waitForEvent('download');
await page.getByText('Download file').click();
const download = await downloadPromise;
// FAILS: download.path() fails when connecting to a remote browser
// const result = fs.readFileSync(await download.path(), 'utf-8');
// FIX: use saveAs() to download the file, when connecting to a remote browser
await download.saveAs('/path/to/save/at/' + download.suggestedFilename());