By Andrey Shchekin


2009-07-24 08:10:47 8 Comments

Is there any kind of API that can allow me to manipulate a file download dialog in Firefox? (I want to access the one that appears when user does something, not initiate one myself).

What I want to do is to access this dialog from Selenium (and whether Selenium "privileged mode" is enough to access chrome interface is something I am not sure about as well).

11 comments

@Sanjay Bharwani 2016-03-17 06:35:49

I was facing the same issue. In our application the instance of FireFox was created by passing the DesiredCapabilities as follows

driver = new FirefoxDriver(capabilities);

Based on the suggestions by others, I did my changes as

FirefoxProfile firefoxProfile = new FirefoxProfile();     
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
    "application/octet-stream");
driver = new FirefoxDrvier(firefoxProfile);

This served the purpose but unfortunately my other automation tests started failing. And the reason was, I have removed the capabilities which were being passed earlier.

Some more browsing on net and found an alternate way. We can set the profile itself in the desired Capabilities.

So the new working code looks like

DesiredCapabilities capabilities = DesiredCapabilities.firefox();

// add more capabilities as per your need.
FirefoxProfile firefoxProfile = new FirefoxProfile();        
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
    "application/octet-stream");

// set the firefoxprofile as a capability
capabilities.setCapability(FirefoxDriver.PROFILE, firefoxProfile);
driver = new FirefoxDriver(capabilities);

@Pratik Patel 2017-03-20 07:14:38

I had the same problem, I wanted no access of Save Dialogue.

Below code can help:

    FirefoxProfile fp = new FirefoxProfile();
    fp.setPreference("browser.download.folderList",2);
    fp.setPreference("browser.download.manager.showWhenStarting",false);
    fp.setPreference("browser.helperApps.alwaysAsk.force", false);
    // Below you have to set the content-type of downloading file(I have set simple CSV file)
    fp.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");

According to the file type which is being downloaded, You need to specify content types.

You can specify multiple content-types separated with ' ; '

e.g:

    fp.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv;application/vnd.ms-excel;application/msword");

@Neil Ellis 2016-05-09 21:56:01

In addition you can add

      profile.setPreference("browser.download.panel.shown",false);

To remove the downloaded file list that gets shown by default and covers up part of the web page.

My total settings are:

        DesiredCapabilities dc = DesiredCapabilities.firefox();
        dc.merge(capabillities);
        FirefoxProfile profile = new FirefoxProfile();
        profile.setAcceptUntrustedCertificates(true);
        profile.setPreference("browser.download.folderList", 4);
        profile.setPreference("browser.download.dir", TestConstants.downloadDir.getAbsolutePath());
        profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
        profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/msword, application/csv, application/ris, text/csv, data:image/png, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream");
        profile.setPreference("browser.download.manager.showWhenStarting", false);
        profile.setPreference("browser.download.manager.focusWhenStarting", false);
        profile.setPreference("browser.download.useDownloadDir", true);
        profile.setPreference("browser.helperApps.alwaysAsk.force", false);
        profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
        profile.setPreference("browser.download.manager.closeWhenDone", true);
        profile.setPreference("browser.download.manager.showAlertOnComplete", false);
        profile.setPreference("browser.download.manager.useWindow", false);
        profile.setPreference("browser.download.panel.shown",false);
        dc.setCapability(FirefoxDriver.PROFILE, profile);
        this.driver = new FirefoxDriver(dc);

@AVA 2017-03-10 08:20:42

Hi Neil Ellis, Clicking on image button, "Export" opens a popup window. File download is triggered from the popup window and the popup is closed. If possible, please guide me in achieving silent file download in this scenario?

@djangofan 2016-03-03 20:07:18

Instead of triggering the native file-download dialog like so:

By DOWNLOAD_ANCHOR = By.partialLinkText("download");
driver.findElement(DOWNLOAD_ANCHOR).click();

I usually do this instead, to bypass the native File Download dialog. This way it works on ALL browsers:

String downloadURL = driver.findElement(DOWNLOAD_ANCHOR).getAttribute("href");
File downloadedFile = getFileFromURL(downloadURL);

This just requires that you implement method getFileFromURL that uses Apache HttpClient to download a file and return a File reference to you.

Similarly, if you happen to be using Selenide, it works the same way using the built-in download() function for handling file downloads.

Until Marionette is more mature, thats what I do.

@shish 2015-06-17 11:00:00

Most browsers (in mine case Firefox) select the OK button by default. So I managed to solve this by using the following code. It basically presses enter for you and the file is downloaded.

Robot robot = new Robot();

// A short pause, just to be sure that OK is selected
Thread.sleep(3000);

robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);

@Prashanth Sams 2015-05-27 10:59:22

Web Applications generate 3 different types of pop-ups; namely,

 1| JavaScript PopUps
 2| Browser PopUps
 3| Native OS PopUps [e.g., Windows Popup like Upload/Download]

In General, the JavaScript pop-ups are generated by the web application code. Selenium provides an API to handle these JavaScript pop-ups, such as Alert.

Eventually, the simplest way to ignore Browser pop-up and download files is done by making use of Browser profiles; There are couple of ways to do this:

  • Manually involve changes on browser properties (or)
  • Customize browser properties using profile setPreference

Method1

Before you start working with pop-ups on Browser profiles, make sure that the Download options are set default to Save File.

(Open Firefox) Tools > Options > Applications

enter image description here

Method2

Make use of the below snippet and do edits whenever necessary.

FirefoxProfile profile = new FirefoxProfile();

String path = "C:\\Test\\";
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", path);
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/msword, application/csv, application/ris, text/csv, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream");
profile.setPreference("browser.download.manager.showWhenStarting", false);
profile.setPreference("browser.download.manager.focusWhenStarting", false);  
profile.setPreference("browser.download.useDownloadDir", true);
profile.setPreference("browser.helperApps.alwaysAsk.force", false);
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.download.manager.closeWhenDone", true);
profile.setPreference("browser.download.manager.showAlertOnComplete", false);
profile.setPreference("browser.download.manager.useWindow", false);
profile.setPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
profile.setPreference("pdfjs.disabled", true);

driver = new FirefoxDriver(profile);

@Nifle 2009-07-24 09:40:24

Dont know, but you could perhaps check the source of one of the Firefox download addons.

Here is the source for one that I use Download Statusbar.

@Andrey Shchekin 2009-07-24 22:31:48

Thanks, that very interesting (but proves that is either impossible or insanely hard unless I am writing an extension with xul parts).

@dlopezgonzalez 2012-02-17 13:22:46

I have a solution for this issue, check the code:

FirefoxProfile firefoxProfile = new FirefoxProfile();

firefoxProfile.setPreference("browser.download.folderList",2);
firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
firefoxProfile.setPreference("browser.download.dir","c:\\downloads");
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");

WebDriver driver = new FirefoxDriver(firefoxProfile);//new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);

driver.navigate().to("http://www.myfile.com/hey.csv");

@bakoyaro 2013-08-17 13:07:28

Close, but not quite working for Firefox on Ubuntu 12.04 as of 8/17/2013. Change the value of the "browser.helperApps.neverAsk.saveToDisk" property to "text/csv,application/vnd.ms-excel" and it will work on Ubuntu.

@dlopezgonzalez 2013-08-21 15:31:04

May be the value name changed, this is since more than one year.

@Yatin 2015-04-01 06:50:48

I am using the same method to auto-save the file but its not working. My firefox version is 20.0. And I am trying to download pdf files(MIME type used->application/pdf,application/x-pdf)

@Martin Höller 2016-01-25 12:12:02

Not that this is not working with Content-Disposition: attachment. Firefox seems to always popup a dialog in this case!

@donfuxx 2016-06-02 11:42:00

for downloading xls files in linux this worked for me: setPreference("browser.helperApps.neverAsk.saveToDisk", "application/xls");

@Augustin Laville 2017-06-29 15:01:01

With current version of Firefox you have to change browser.download.manager.showWhenStarting by browser.download.panel.shown.

@Akendo 2011-11-02 16:03:24

I was stuck with the same problem, but I found a solution. I did it the same way as this blog did.

Of course this was Java, I've translated it to Python:

fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir",getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","text/csv")

browser = webdriver.Firefox(firefox_profile=fp)

In my example it was a CSV file. But when you need more, there are stored in the ~/.mozilla/$USER_PROFILE/mimeTypes.rdf

@ealfonso 2013-06-21 05:48:51

I have tried this, but it doesn't seem to work for me. The file save dialog still shows up.

@user2426679 2015-02-23 00:05:53

Thanks, the last preference was clutch: "application/pdf"

@Yatin 2015-04-01 06:52:46

I am using the same method to auto-save the file but its not working. My firefox version is 20.0. And I am trying to download pdf files(MIME type used->application/pdf,application/x-pdf)

@Igor 2016-02-17 19:38:59

Thank you @Akendo. This is working for me using python 3.4.3, selenium-2.52 and Firefox 44.

@Ruturaj 2009-07-25 10:45:07

I didnt unserstood your objective, Do you wanted your test to automatically download file when test is getting executed, if yes, then You need to use custom Firefox profile in your test execution.

In the custom profile, for first time execute test manually and if download dialog comes, the set it Save it to Disk, also check Always perform this action checkbox which will ensure that file automatically get downloaded next time you run your test.

@Aaron Digulla 2009-07-24 08:22:27

Not that I know of. But you can configure Firefox to automatically start the download and save the file in a specific place. Your test could then check that the file actually arrived.

@Andrey Shchekin 2009-07-24 22:30:41

Ok, I think I'll go with this solution.

@Vignesh Dhamodaran 2016-03-08 19:13:00

But selenium will launch Firefox in default profile (Since no profile is specified) so every time you have configure it. Instead of it create a new profile with your preferences so it is easier.

Related Questions

Sponsored Content

3 Answered Questions

[SOLVED] Headless Browser and scraping - solutions

12 Answered Questions

[SOLVED] How do I manually fire HTTP POST requests with Firefox or Chrome?

10 Answered Questions

[SOLVED] How to create a dialog with “yes” and “no” options?

  • 2012-02-17 20:03:21
  • crchin
  • 649601 View
  • 531 Score
  • 10 Answer
  • Tags:   javascript dialog

10 Answered Questions

[SOLVED] Targeting only Firefox with CSS

  • 2009-06-04 20:19:09
  • avdgaag
  • 489141 View
  • 527 Score
  • 10 Answer
  • Tags:   css firefox css-hack

1 Answered Questions

2 Answered Questions

1 Answered Questions

Selenium - Retaining firefox cache and history files

  • 2014-09-02 12:40:48
  • Hannu
  • 934 View
  • 1 Score
  • 1 Answer
  • Tags:   firefox selenium

3 Answered Questions

4 Answered Questions

Sponsored Content