CodeceptJS を使ってファイルのダウンロードを試した際のメモです。
JavaScriptネタなので、後付けで JavaScript のアドベントカレンダーの 25日目に登録もしてみました。
CodeceptJS の利用
以前、自動化をあれこれ試していたときに使ったものの 1つに「CodeceptJS」がありました。
その際、Puppeteer・Playwright・WebDriver との組み合わせをそれぞれ試したりして、Puppeteer との組み合わせをメインに使っていました。
そんな中、以下の記事を見かけて、Playwright との組み合わせなどをあらためて見直してみようと思い、それを試すついでに以前は試していなかったファイルのダウンロードも試してみたりもしました。
●2020年12月現在、puppeteerとplaywright どっち選んだらいいの? - Qiita
https://qiita.com/YusukeIwaki/items/a9dbd48b1ed4313f3815
このファイルダウンロード関連の話について、自分用のメモに残しておこうと考えて書いたのがこの記事になります。
CodeceptJS でファイルのダウンロード
codecept.conf.js への追記
以下のページの情報などを見ると、ファイルのダウンロードを行う場合は、codecept.conf.js に "FileSystem": {}
という内容を記載する必要があるようです。
●"I.amInPath is not a function" on using FileSystem helper · Issue #931 · codeceptjs/CodeceptJS
https://github.com/codeceptjs/CodeceptJS/issues/931
具体的には、codecept.conf.js で以下のように追記をしました。
helpers: {
Playwright: {
【(省略)】
},
"FileSystem": {}
プログラムの部分
ファイルのダウンロードについて、とあるファイルへのリンクがページ内にあり、それをクリックする動作でダウンロードが実行できる状況を想定しています。そのページでリンクを単純にクリックをするだけなら、以下のようになるかと思います。
I.click('【(クリック対象となるテキスト)】');
ファイルのダウンロード関連の情報で、公式ドキュメントを見てみると、以下の部分が見つかりました。
●Playwright | CodeceptJS
https://codecept.io/helpers/Playwright/#handledownloads
ダウンロード対象が pptx で、01.pptx というファイル名で保存する場合、例えば以下のようにすれば良いようでした。
I.handleDownloads('files/01.pptx');
I.click('【(クリック対象となるテキスト)】');
I.amInPath('output');
I.waitForFile('files/01.pptx', 5);
これにより、output フォルダのサブフォルダ「files」の中に、01.pptx が保存されるのを確認できました。