Protractor file download test fails when headless chrome

廉价感情. 提交于 2019-11-28 04:19:10

问题


I am having an issue with a protractor test. It was working, but now (even thought nothing has changed) it is not. The test is just opening the app (web application) and clicking on a button to download an image. The download should start straight away. The problem is that the next instruction after the download event throws an exception, Failed: chrome not reachable. I am using the latest chrome and chrome driver versions.

The capabilites section for protractor is like this:

capabilities: {
   browserName: 'chrome',
   loggingPrefs: { browser: 'ALL' },
   chromeOptions: {
      args: ['--headless', '--window-size=1240,780'],
   },
}

I am reading about using DevTools to enable downloads in headless mode (Page.setDownloadBehavior), but so far no luck.

Does anybody have this issue too? Any clue how to fix it?

Thanks.


回答1:


There could be another easy way to do it, but this is what I have done in my test suite. I used got library, however, you can use any library to send an HTTP post request.

Discussion about setting download directory in headless chrome: https://bugs.chromium.org/p/chromium/issues/detail?id=696481

let got = require('got');
let session = await browser.getSession();
let sessionId = session['id_'];
let params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': downloadDir }}
await got.post('http://localhost:4444/wd/hub/session/'+ sessionId + '/chromium/send_command', {body: JSON.stringify(params)})

If you have not disabled ControlFlow in your protractor config, change ASync/Await to .then.




回答2:


An easier solution is to add these lines to your protractor.conf.js:

exports.config = {
  ...
  onPrepare() {
    ...
    browser.driver.sendChromiumCommand('Page.setDownloadBehavior', {
      behavior: 'allow',
      downloadPath: downloadsPath
    });
  }
};

From: https://bugs.chromium.org/p/chromium/issues/detail?id=696481#c196

Appendix

If you are to lazy to find a Download Path just paste this at the top of your protractor.conf.js:

var path = require('path');
var downloadsPath = path.resolve(__dirname, './downloads');

It will download the file to the e2e/downloads folder. Just use the same code in your tests to find out if the file downloaded.



来源:https://stackoverflow.com/questions/48831273/protractor-file-download-test-fails-when-headless-chrome

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!