javascript - Selenium + Protractactor:在 chrome 和 firefox 中下载文件
问题描述
我一直在尝试更新我的 conf.js 文件以下载文件,它应该适用于 firefox 和 chrome(彼此独立)。
我一直在线关注指南和答案(包括但不限于stackoverflow),但它并不完全适合我。Chrome 没问题,Firefox 是我的麻烦制造者。
在 Firefox 上,它根本不下载文件,这与下载文件的 chrome 不同。
更新:我无法禁用 Firefox 的弹出窗口
来自 conf.js 的相关信息
exports.config = {
[...]
multiCapabilities: [
{
browserName: 'chrome',
'goog:chromeOptions': {
w3c: false, // problems with latest chrome driver... browser.actions is causing issues: https://github.com/jan-molak/serenity-js/issues/329
prefs: {
download: {
prompt_for_download: false,
directory_upgrade: true,
default_directory: downloadsPath,
},
},
},
} ,
{
browserName: 'firefox',
'goog:chromeOptions': {
marionette: true,
'moz:firefoxOptions': {
prefs: {
'pdfjs.disabled': true,
'browser.download.folderList': 2,
'browser.download.dir': downloadsPath,
'browser.download.panel.shown': false,
'browser.download.useDownloadDir': true,
'browser.download.manager.useWindow': false,
'browser.helperApps.alwaysAsk.force': false,
'browser.helperApps.neverAsk.openFile': true,
'browser.download.manager.closeWhenDone': false,
'browser.download.manager.alertOnEXEOpen': false,
'browser.download.manager.showWhenStarting': false,
'browser.download.manager.focusWhenStarting': false,
'browser.download.manager.showAlertOnComplete': false,
'browser.helperApps.neverAsk.saveToDisk': 'application/vnd.openxmlformats',
},
},
},
},
],
[...]
};
我的 dowload-e2e.js 规范中的相关代码:
const downloadBtn = manipulations.getDomObject('download-contract-button', 'id');
browser.executeScript('arguments[0].click();', downloadBtn.getWebElement());
try {
await downloads.verifyFileExists(`file-name.docx`);
await downloads.verifyFileSize(`file-name.docx`, 0);
} catch (err) {
throw new Error(`ERROR: ${err.message}`);
}
downloads.removeFile(`file-name.docx`);
解决方案
Firefox/Chrome 尝试这样:
const multiCapabilities = [
{
browserName: 'chrome',
'goog:chromeOptions': {
w3c: false, // due problems with latest chrome driver
// browser.actions is causing issues: https://github.com/jan-molak/serenity-js/issues/329
prefs: {
download: {
'prompt_for_download': false,
'directory_upgrade': true,
'default_directory': downloadsPath
}
}
}
},
{
browserName: 'firefox',
'goog:chromeOptions': {
marionette: true,
'moz:firefoxOptions': {
prefs: {
'browser.download.folderList': 2,
'browser.download.dir': downloadsPath,
'browser.download.manager.showWhenStarting': false,
'browser.helperApps.alwaysAsk.force': false,
'browser.download.manager.useWindow': false,
'browser.helperApps.neverAsk.saveToDisk': 'application/octet-stream, application/json, ' +
'text/comma-separated-values, text/csv, application/csv, ' +
'application/excel, application/vnd.ms-excel, ' +
'application/vnd.msexcel, text/anytext, text/plaintext, ' +
'image/png, image/pjpeg, image/jpeg, application/zip'
}
}
}
}
];
推荐阅读
- c# - 插入查询未在数据库表中插入会话 ID
- gradle-kotlin-dsl - Gradle Kotlin DSL:访问 settings.gradle.kts 中定义的对象
- windows - 在 Windows 上使用 Lua 读写串行端口
- javascript - 根据 Symbol ES6 中的可用性重复调用
- ios - 使用 Swift 搜索结果后,搜索栏没有重新加载到原始数据?
- php - 每次尝试在 php 文件中使用 password_hash 时,Ajax 都会失败
- java - ModelMapper 发出白色从字符串转换为 ObjectId 的问题
- nativescript - 如何在 NativeScript Angular 中消除 SearchBar 的抖动?
- python - 散点图上的散景图回归线
- function - 如何驯服 Power BI 函数名称的区分大小写