Angular 在Firefox上下载带有量角器的PDF文件';行不通

Angular 在Firefox上下载带有量角器的PDF文件';行不通,angular,firefox,protractor,e2e-testing,Angular,Firefox,Protractor,E2e Testing,我在angular 5 e2e测试中遇到了一个问题,我需要用firefox自动下载pdf。它不应该在firefox中显示“另存为…”窗口 我已经尝试了stackoverflow的一些解决方案,但它们似乎对我不起作用 以下是我的dragrator.conf.js文件的内容: const { SpecReporter } = require('jasmine-spec-reporter'); exports.config = { allScriptsTimeout: 11000, spec

我在angular 5 e2e测试中遇到了一个问题,我需要用firefox自动下载pdf。它不应该在firefox中显示“另存为…”窗口

我已经尝试了stackoverflow的一些解决方案,但它们似乎对我不起作用

以下是我的dragrator.conf.js文件的内容:

const { SpecReporter } = require('jasmine-spec-reporter');

exports.config = {
  allScriptsTimeout: 11000,
  specs: [
    './e2e/**/*.e2e-spec.ts'
  ],
  capabilities: {
    'browserName' : 'firefox',
    'moz:firefoxOptions': {
      prefs: {
        'browser.download.folderList': 2,
        'browser.download.dir' : process.cwd() + "/resources/test/download",
        'services.sync.prefs.sync.browser.download.useDownloadDir': true,
        'browser.download.useDownloadDir': true,
        'browser.download.manager.alertOnEXEOpen': false,
        'browser.download.manager.closeWhenDone': true,
        'browser.download.manager.focusWhenStarting': false,
        'browser.download.manager.showWhenStarting': false,
        'browser.helperApps.alwaysAsk.force': false,
        'browser.download.manager.showAlertOnComplete': false,
        'browser.download.manager.useWindow': false,
        'browser.helperApps.neverAsk.saveToDisk': 'application/pdf',
      },
    },
  },
  directConnect: true,
  baseUrl: 'http://localhost:4200/',
  framework: 'jasmine',
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
    print: function() {}
  },
  onPrepare() {
    require('ts-node').register({
      project: 'e2e/tsconfig.e2e.json'
    });
    require("zone.js/dist/zone-node");
    require("zone.js/dist/long-stack-trace-zone");
    require("zone.js/dist/async-test");
    require("zone.js/dist/fake-async-test");
    require("zone.js/dist/sync-test");
    require("zone.js/dist/proxy");
    require("zone.js/dist/jasmine-patch");
    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
  }
};
但在量角器测试中,单击下载pdf按钮时,firefox仍会打开“另存为…”提示,并且不会自动下载pdf。 但是,它会在测试期间创建“/resources/test/download”文件夹。但它是空的

我正在Mac OS Mojave(10.14.4)和package.json上使用Firefox版本66.0.2:

"selenium-webdriver": "^4.0.0-alpha.1",
"jasmine-core": "2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~2.0.0",
"karma-chrome-launcher": "~2.2.0",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "~1.4.1",
"karma-firefox-launcher": "^1.1.0",
"karma-jasmine": "~1.1.1",
"karma-jasmine-html-reporter": "~0.2.2",
"protractor": "~5.4.0",

我遗漏了什么吗?

您能用网络检查器验证文件的MIME类型吗?确保它不是类似于“应用程序/八位字节流”。“browser.helperApps.neverAsk.saveToDisk”中的值需要与内容类型完全匹配。根据响应的标题(如下所示):
HTTP/1.1 200 OK x-powered-by:Express access control allow origin:*内容类型:application/json日期:Mon,2019年4月8日19:12:14 GMT连接:关闭传输编码:chunked
MIME类型应为
application/json
,但当将值更改为
“browser.helperApps.neverAsk.saveToDisk':“application/json”
时,firefox中的“另存为…”窗口仍会打开,文件不会被下载。angular/typescript代码,触发GET请求的代码如下:
this.http.GET(http://localhost:4200/getPdf订阅((文件:blob)=>{FileSaver.saveAs(文件,this.fileBaseName+'_V1.pdf'));…
我刚刚删除了下载文件夹
/resources/test/download
并再次运行了e2e测试。在测试期间,量角器正确地创建了
/resources/test/download
文件夹,firefox下载窗口打开,在短时间内我可以看到文件夹中的一个文件,看起来像这样
6xcvK+Le.pdf.part
。但在测试完成后,文件再次消失。你能尝试使用“应用程序/八位字节流”吗?我浏览了FileSaver.js的源代码,它看起来可能是在设置内容类型。这里还找到了一个参考:你能用网络检查器验证你文件的MIME类型吗?确保它不是类似于“applic”的东西改为“八位字节流”。“browser.helperApps.neverAsk.saveToDisk”中的值需要与内容类型完全匹配。根据响应的标题,如下所示:
HTTP/1.1 200 OK x-powered-by:Express access control allow origin:*内容类型:应用程序/json日期:Mon,2019年4月8日19:12:14 GMT连接:close transfer encoding:chunked
MIME类型应为
application/json
,但当将值更改为
时,“browser.helperApps.neverAsk.saveToDisk':“application/json”
将“另存为…”firefox中的窗口仍然打开,文件未被下载。触发GET请求的angular/typescript代码如下所示:
this.http.GET(http://localhost:4200/getPdf订阅((文件:blob)=>{FileSaver.saveAs(文件,this.fileBaseName+'_V1.pdf'));…
我刚刚删除了下载文件夹
/resources/test/download
并再次运行了e2e测试。在测试期间,量角器正确地创建了
/resources/test/download
文件夹,firefox下载窗口打开,在短时间内我可以看到文件夹中的一个文件,看起来像这样
6xcvK+Le.pdf.part
。但在测试完成后,该文件再次消失。您可以尝试使用“application/octet stream”吗?我浏览了FileSaver.js的源代码,它看起来可能正在设置内容类型。这里还找到了对该文件的引用: