Загрузка PDF-файла в Firefox с protractor не работает

#angular #firefox #protractor #e2e-testing

#angular #firefox #транспортир #e2e-тестирование

Вопрос:

У меня проблема в моих тестах angular 5 e2e, когда мне нужно автоматически загружать PDF-файл в Firefox. В Firefox не должно отображаться окно «Сохранить как ..».

Я уже пробовал некоторые решения здесь из stackoverflow, но, похоже, они у меня не работают.

Вот содержание моего protractor.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 } }));
  }
};
  

Но когда в тесте protractor нажата кнопка загрузить pdf, firefox по-прежнему открывает приглашение «Сохранить как …» и не загружает PDF автоматически.
Однако во время теста создается папка «/resources / test / download». Но он пуст.

Я использую Firefox версии 66.0.2 на Mac OS Mojave (10.14.4) и в package.json:

 "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",
  

Я что-то упускаю?

Комментарии:

1. Можете ли вы проверить MIME-тип вашего файла с помощью network inspector? Убедитесь, что это не что-то вроде «application / octet-stream» вместо этого. Значение в ‘browser.helperApps.neverAsk.saveToDisk’ должно точно соответствовать типу содержимого.

2. Согласно заголовку ответа, который выглядит следующим образом: HTTP/1.1 200 OK x-powered-by: Express access-control-allow-origin: * content-type: application/json date: Mon, 08 Apr 2019 19:12:14 GMT connection: close transfer-encoding: chunked Тип MIME должен быть application/json , но при изменении значения на 'browser.helperApps.neverAsk.saveToDisk': 'application/json' окно «Сохранить как ..» в Firefox по-прежнему открывается, и файл не загружается.

3. Код angular / typescript, который запускает запрос GET, выглядит следующим образом: this.http.get(http://localhost:4200/getPdf, {responseType: 'blob'}).subscribe((file: Blob) => { FileSaver.saveAs(file, this.fileBaseName '_V1.pdf'); …

4. Я просто удалил папку загрузки /resources/test/download и снова запустил тест e2e. Во время теста Protractor правильно создает /resources/test/download папку, открывается окно загрузки firefox, и в течение короткого периода я могу видеть файл в папке, который выглядит следующим образом 6xcvK Le.pdf.part . Но после завершения теста файл снова исчезает.

5. Можете ли вы попробовать использовать «application / octet-stream»? Я просмотрел исходный код FileSaver.js и похоже, что это может быть настройкой типа содержимого. Также нашел ссылку на это здесь: github.com/eligrey/FileSaver.js/issues/180