Selenium WebDriver File Download Testing
Not easy!
When you click a download button with the standard browser configuration you are asked for a location to download the file. Let’s explore the Google Encyclopedia of copy and paste code to see how we can solve this.
The main solution seems to be setting the browser profile to automatically download without asking for a location. Below I have a little info on what I found out about Firefox, Chrome and IE. I didn’t do a deep dive. Right now I am spiking a solution to see if this will need to be a manual test.
Firefox
From our friends at StackOverflow this posts advocates manually setting the Firefox profile then changing to the profile in Selenium (http://stackoverflow.com/questions/14645877/how-to-test-downloading-files-in-selenium2-using-java-and-then-check-the-downloa)
In firefox also you can do the same thing.
Create one firefox profile
Change the firefox download setting as it should save files without asking about location to save
Launch the automation using that profile.
FirefoxProfile profile = new FirefoxProfile(profileDir);
driver=new FirefoxDriver(profile);
Another little gem from the same site says I can do one better by configuring the profile in code (http://stackoverflow.com/questions/16746707/how-to-download-any-file-and-save-it-to-the-desired-location-using-selenium-webd):
firefoxProfile.setPreference(“browser.helperApps.neverAsk.saveToDisk”,”text/csv”);
And this post brings it home and puts it all together (http://stackoverflow.com/questions/1176348/access-to-file-download-dialog-in-firefox)
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”);
Chrome
There are instructions on achieving the same results as Firefox, but you have to jump threw a few minor hoops to get there (http://stackoverflow.com/questions/15824996/how-to-set-chrome-preferences-using-selenium-webdriver-net-binding).
IE
There seems to be ways to do this in WatiN in browsers below IE9, but for current IE browsers its just plain ugly (http://stackoverflow.com/questions/7500339/how-to-test-file-download-with-watin-ie9/8532222#8532222). I guess I could use one of the GUI Automation tools (see GUI Automation post), but is it really worth all that?
I haven’t tried these at home, so I am naively assuming that they work. Anyway after you have successfully downloaded the file, you can use C# System.IO to inspect the file format, size, file name, content…you get the picture.
One comment