无头镀铬时,量角器文件下载测试失败

时间:2018-02-16 16:43:07

标签: download protractor angularjs-e2e google-chrome-headless

我遇到了量角器测试的问题。它工作,但现在(甚至认为没有任何改变)它不是。 测试只是打开应用程序(Web应用程序)并单击按钮下载图像。下载应该立即开始。 问题是下载事件后的下一条指令抛出异常,失败:chrome无法访问。我使用的是最新的chrome和chrome驱动程序版本。

量角器的功能部分是这样的:

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

我正在阅读使用DevTools在无头模式下启用下载(Page.setDownloadBehavior),但到目前为止还没有运气。

有人也有这个问题吗?有任何线索如何修复它?

感谢。

2 个答案:

答案 0 :(得分:4)

可能还有另一种简单的方法,但这就是我在测试套件中所做的。 我使用了got库,但是,您可以使用任何库来发送HTTP post请求。

讨论在无头镀铬中设置下载目录: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)})

如果您未在量角器配置中禁用ControlFlow,请将ASync / Await更改为.then

答案 1 :(得分:0)

一个更简单的解决方案是将这些行添加到您的protractor.conf.js

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

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

附录

如果您懒于找到下载路径,只需将其粘贴在protractor.conf.js的顶部:

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

它将把文件下载到e2e/downloads文件夹中。只需在测试中使用相同的代码即可确定文件是否已下载。