一部の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回目のダウンロードをトリガーするステップ( ダウンロード などのクリック)の直前に、再度ダウンロードイベントを待ち受けるコードを追加する必要があります。
以下の手順で修正を行ってください。
2回目以降のダウンロードを行うステップ( 要素をクリック など)の直前に、 Playwrightコードステップ を挿入します。
以下のコードを記述し、
downloadPromiseを再定義します。
// constは付けずに記述してください
downloadPromise = page.waitForEvent("download");FAQ
リプレイ時にダウンロードするファイルのファイル名が変わるのはなぜですか?
Playwrightの仕様になります。
ダウンロードしたファイル名を確認したい場合、上述しているsuggestedFilename()を利用することで検証することが可能です。