ダウンロードされたファイルに対するアサーション

Prev Next

一部のWebサイトでは、レポートのエクスポートやドキュメントの保存時にファイルのダウンロードが発生します。

テストでは、ファイルが正しくダウンロードされたかどうか、ファイル名が正しいか、内容が正しいかなどを確認したい場合があります。

このページでは、ダウンロードファイルに対してアサーションを行うためのコード例を紹介しています。

設定方法

まず、ファイルダウンロードをトリガーするステップ(通常はクリックステップ)を特定します。

そのステップの前に、ファイルのダウンロード開始を待つPlaywrightコードステップを追加します。

const downloadPromise = page.waitForEvent("download");

次に、クリックステップの後に、ダウンロードされたファイルを扱い、アサーションを行うための別のPlaywrightコードステップを追加します。

ファイルの中身を検証

以下の例では、ダウンロードされたファイルの内容をメモリに読み込み、ファイル内に「Q2 report」という文字列が含まれているかをアサート(検証)しています。

const download = await downloadPromise;

        const downloadStream = await download.createReadStream();
        const fileContent = await new Promise((resolve) => {
        const chunks: Buffer[] = [];
        downloadStream.on("data", (chunk) => {
        chunks.push(chunk);
        });
        downloadStream.on("end", () => {
        resolve(Buffer.concat(chunks));
        });
        });

        // Example assertion — update this to match your use case
        expect(fileContent.toString("utf-8")).toContain("Q2 report");

ファイル名を検証

以下の例では、ファイル名に「Q2 report」という文字列が含まれているかをアサート(検証)しています。

const download = await downloadPromise;

        // Get the file name
        const fileName = download.suggestedFilename();

        // Example assertion for the file name
        expect(fileName).toContain("Q2 report");

このコードスニペットはカスタマイズ可能で、ダウンロードやダウンロードされたファイルに関するさまざまな検証に応用できます。
他にどのようなダウンロード操作がAutify NexusのPlaywrightステップで行えるかについては、Playwrightの公式ドキュメントをご参照ください。

1つのシナリオで複数回のダウンロード検証を行う場合

1つのシナリオ内でファイルのダウンロード検証を2回以上行う場合、そのままでは2回目以降の検証が正しく動作しないことがあります。 これは、Playwrightの page.waitForEvent("download") が一度イベントを検知すると完了してしまい、1回目のダウンロード情報を参照し続けてしまう仕様によるものです。

新しくダウンロードしたファイルに対して正しくアサーション(内容一致確認)を行うためには、2回目のダウンロードをトリガーするステップ( ダウンロード などのクリック)の直前に、再度ダウンロードイベントを待ち受けるコードを追加する必要があります。

以下の手順で修正を行ってください。

  1. 2回目以降のダウンロードを行うステップ( 要素をクリック など)の直前に、 Playwrightコードステップ を挿入します。

  2. 以下のコードを記述し、 downloadPromise を再定義します。

// constは付けずに記述してください
downloadPromise = page.waitForEvent("download");


FAQ

リプレイ時にダウンロードするファイルのファイル名が変わるのはなぜですか?

Playwrightの仕様になります。
ダウンロードしたファイル名を確認したい場合、上述しているsuggestedFilename()を利用することで検証することが可能です。