LoginSignup
2
4

More than 5 years have passed since last update.

Headless Chrome でファイルダウンロード先のパスを設定する方法

Posted at

背景

Selenium を使って Headless Chrome で E2E テストを行う場合に、ファイルをダウンロードできるかどうか、ダウンロードしたファイルが正しいかどうかをテストしたい場合があります。このとき、Chrome に適切なオプションを渡すことでダウンロード先を指定します。 このとき、素の Chrome と Headless Chrome では指定の仕方が異なるので、その方法をまとめます。

解決策

Headless Chrome の場合、selenium に対して send_comand によってパラメータを登録する必要があります。
downloadPath に対して、ダウンロード先のパスを設定します。


const fetch = require('node-fetch');
browser.getSession().then((session) => {
  const sessionId = session['id_'];
  fetch('http://localhost:4444/wd/hub/session/'+ sessionId + '/chromium/send_command', {
    method: 'POST',
    body: JSON.stringify({
      'cmd': 'Page.setDownloadBehavior',
      'params': {'behavior': 'allow', 'downloadPath': './path/to/download' }
    }),
  });
});

ここでは、 selenium へ HTTP リクエストを送信するのに node-fetch を使っています。 await/async を使わずにそのまま Promise を処理しています。他の HTTP ライブラリを使ったり、 await/async で書くことも可能です。

参考: 素の Chrome の場合


capabilities = {
  browserName: "chrome",
  chromeOptions: {
    prefs: {
      'download': {
        'prompt_for_download': false,
        'directory_upgrade': true,
        'default_directory': './path/to/download',
      }
    }
  },
};

default_directory に対して、ダウンロード先のパスを設定します。

参考文献

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4