带文件下载的 Angular ng e2e 测试用例不适用于 headless chrome

标签 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
});

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

我怎样才能让它发挥作用?提前致谢。

最佳答案

刚刚找到了解决方案。

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

关于带文件下载的 Angular ng e2e 测试用例不适用于 headless chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53300792/

相关文章:

angular - 选择选项不适用于 Angular 4 中的 ng-model

javascript - 单击元素后是否可以将字节附加到具有 download 属性的 <a> 元素的 href 处的数据 URI?

php - 如何使用php检索上传的文件

javascript - AngularJS 和 Protractor - 在元素 .isDisplayed() 时执行 .click()

angularjs - 如何保存 Protractor 测试结果

javascript - CSS 无法按 Angular 插值工作

angular - 从 Angular 2 上的查询参数中预填充输入文本框

javascript - Protractor>Package.json 配置> 在我的 mac 书中找不到 .bin 文件夹

angular - 如果 '<x>' 是一个 Angular 组件,那么验证它是这个模块的一部分

java - 从已签名的小程序加载 Java 类