The web application I am developing allows the User to download various files in different formats. To test this works I’m using a combination of things, with Ruby WATIR-WEBDRIVER for the front end and Firefox for the browser and all automated with Hudson as the Continuous Integration (CI) Server. The problem I face is that Firefox wants me to tell it what to do with the files each time I download them and this isn’t going to work for my CI needs. So how can I prevent Firefox from asking me what to do with each file I download?
The functionality is there inside Firefox and WATIR-WEBDRIVER and you just need to turn it on. What follows are the steps to do this:
Create a Firefox Profile
Run the following command from your command prompt / terminal:
firefox -ProfileManager -no-remote
This will start an instance of the Firefox Profile Manager (see below) where you can create a new profile. I called mine “no-download-dialog”. You may also have an existing profile for running WebDriver but leave this alone. Click “Create Profile” and follow the wizard. When back on the profile manager select “Don’t ask at Startup.”. Click “Start Firefox”. NOTE that we are now using the Firefox Profile we just created.
Make a File Association
Firefox allows you to disable asking you what should happen to files being downloaded when there is a file association for that type of file. So using this Firefox instance go to a Web site and download a file of the type you are going to download during your tests. In my case these were XML and Word documents. During the download Firefox will ask you where you want to save the file and allow you to select the option to “Do this automatically for files like this from now on” (See below). Select this option and save the file.
Now that file is downloaded Firefox should have an association between the file type and the action you want to perform. To make sure this is correct go to the Firefox Preferences (sometimes called Options) and select the Applications tab. I’m using Linux so this is Edit->Preferences->Applications (See below). Scroll down the list of Content Types and Actions until you find the Content Type for your file. If you can’t find it then maybe your Web Server is sending something else as the Content Type when you download files. When you find the Content Type check that the Action is set to “Save File”, if it isn’t you can change it now.
As a final test find another file of the required type and download it and you should not see a file dialog. However, you may see the Download Manager window, which can be disabled in the Preferences->General tab. De-select the “Show the downloads window when downloading a file”.
Test with Profile
Now that you have a profile that doesn’t ask what to do with downloaded files you need to tell your tests which profile to use. I’m using WATIR-WEBDRIVER but the same abilities are provided with other tools that sit atop Selenium. In your code where you obtain a browser instance add an argument to specify the Firefox profile to use. For me this looked liked this:
Watir::Browser.new(:firefox, :profile => 'no-download-dialog')
In some other tools or in Java you may need to specify the profile on the command line like this:
java -jar selenium-server.jar -firefoxProfileTemplate "<your no download dialog profile name>"
Set the Default Profile
So that Firefox is using the default profile when started outside of testing you need to tell it to use the “default” profile again. To do this Start Firefox Profile Manager and choose “default” and make sure “Don’t ask at startup” is selected and then exit. Firefox should behave as normal when started outside of testing
Now when Firefox is run by by the Continuous Integration Server it will not stop the tests to ask you where to save files.