Gabson
Gabson

Reputation: 55

Selenium + Protractactor: Downloading file in chrome & firefox

I've been trying to update my conf.js file to download files, it should work for firefox and chrome (independent of one another).

I've been following the guides and answers online, (including but not limited to stackoverflow) yet it doesn't fully work for me. Chrome is no problem, firefox is my trouble maker.

On firefox it simply does not download the file, unlike chrome where it downloads the file.

Update: I cannot disable popup from firefox

The relevant info from 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',
          },
        },
      },
    },
  ],
[...]
};

The relevant code from my dowload-e2e.js spec:

    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`);

Upvotes: 1

Views: 614

Answers (1)

Infern0
Infern0

Reputation: 2814

Firefox/Chrome try like this:

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

];

Upvotes: 2

Related Questions