#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