1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

【JavaScript 2020】 CodeceptJS でファイルのダウンロード

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

ダウンロードのための設定.jpg

具体的には、codecept.conf.js で以下のように追記をしました。

  helpers: {
    Playwright: {
      【(省略)】
    },
    "FileSystem": {}

プログラムの部分

ファイルのダウンロードについて、とあるファイルへのリンクがページ内にあり、それをクリックする動作でダウンロードが実行できる状況を想定しています。そのページでリンクを単純にクリックをするだけなら、以下のようになるかと思います。

  I.click('【(クリック対象となるテキスト)】');

ファイルのダウンロード関連の情報で、公式ドキュメントを見てみると、以下の部分が見つかりました。

●Playwright | CodeceptJS
 https://codecept.io/helpers/Playwright/#handledownloads

ダウンロードのためのコード.jpg

ダウンロード対象が pptx で、01.pptx というファイル名で保存する場合、例えば以下のようにすれば良いようでした。

  I.handleDownloads('files/01.pptx');
  I.click('【(クリック対象となるテキスト)】');
  I.amInPath('output');
  I.waitForFile('files/01.pptx', 5);

これにより、output フォルダのサブフォルダ「files」の中に、01.pptx が保存されるのを確認できました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?