首页 > 解决方案 > 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`);

标签: javascriptseleniumselenium-webdriverfirefoxprotractor

解决方案


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'
            }
        }
    }
}

];


推荐阅读