带文件下载的Angular ng e2e测试用例不适用于无头Chrome

时间:2018-11-14 12:57:08

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

在angular2 +项目中,我有一个e2e测试用例,单击一个按钮,下载了文件,并检查了内容。它可以在普通模式下工作,但不能在--headless模式下工作。该文件未下载,并且测试用例超时。

在我的protractor.conf.js中,我已经尝试了很多在不同地方发现的标志:

const os = require('os');
[...]

  capabilities: {
    'browserName': 'chrome',
    chromeOptions: {
      args: ['--headless', '--disable-gpu', '--disable-popup-blocking', '--no-sandbox', '--window-size=1024,768', '--remote-debugging-port=9222', "--disable-dev-shm-usage"],
      prefs: {
        'download': {
          'prompt_for_download': false,
          'directory_upgrade': true,
          'default_directory': os.homedir() + '/Downloads'
        }, 
        safebrowsing: {enabled: false, disable_download_protection: true},
        browser: {set_download_behavior: { behavior: 'allow' }}
      }
    }
  },

没有成功。

我还在某处阅读过您可以对其进行配置的

// works for headless and "normal" mode
browser.driver.sendChromiumCommand('Page.setDownloadBehavior', {
    'behavior': 'allow',
    'downloadPath': DOWNLOAD_DIR
});

但是在protractor.conf.js和spec ts文件中的任何“浏览器”变量中都没有“ sendChromiumCommand”。

我该如何使用它?预先感谢。

1 个答案:

答案 0 :(得分:1)

刚刚找到解决方案。

将这些行添加到您的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