How to download a file in selenium webdriver? Yes, sometimes we need to deal with this problem in our test automation projects. Also, there are test cases where you need to check if the download links are working fine or not. It’s not easy to automate them as mostly download features will work but content type might change. So, let’s learn some tips and tricks to download files or files in Selenium. :)
How to Download a File in Selenium Tool Stack?
We will use the below libraries to automate file download operations in selenium.
Step 1: Create WebDriver and Add Options
Chrome has many options that you can manipulate. First of all, you need to set the auto-download directory in ChromeOptions, then create the driver with that option. For this purpose, you need to set “download.default_directory” to a path that you desire.
HashMap<String, Object> chromePrefs = new HashMap<String, Object>(); chromePrefs.put("profile.default_content_settings.popups", 0); chromePrefs.put("download.default_directory", System.getProperty("user.dir")); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("prefs", chromePrefs); WebDriver driver = new ChromeDriver(options);
Step 2: Download the file in Selenium
This is a custom part as you all have different scenarios. I assume that you all implement this part within your application. But just in case I add mine.
//We find the download links List<WebElement> list =driver.findElements(By.cssSelector("div.module>p>a>img")); //Click to 5MB web element WebElement el = list.get(list.size()-1); el.click(); Thread.sleep(500); //Hide Google Popup Ad js.executeScript("document.querySelector(\"html > ins\").style.display='none'"); //Again click to 5MB web element el.click(); //Wait 15 seconds to download 5MB file. //You can write custom wait. Check Selenium Wait article on firebrick-termite-918071.hostingersite.com Thread.sleep(15000);
Step 3: Check The File in Folder
We create a Folder Object with the download path. Then get the file list on that folder and do a REGEX operation to check if the file is downloaded or not. Our regex is very hard coded, you might need to do some complex regex operation according to your needs.
File folder = new File(System.getProperty("user.dir")); //List the files on that folder File[] listOfFiles = folder.listFiles(); boolean found = false; File f = null; //Look for the file in the files // You should write smart REGEX according to the filename for (File listOfFile : listOfFiles) { if (listOfFile.isFile()) { String fileName = listOfFile.getName(); System.out.println("File " + listOfFile.getName()); if (fileName.matches("5MB.zip")) { f = new File(fileName); found = true; } } } Assert.assertTrue(found, "Downloaded document is not found"); f.deleteOnExit();
Now, you are able to download a file within a Selenium project and make the validation.
Note: In order to download many files, you can loop over all web elements and click each of them one by one.
GitHub Project
https://github.com/swtestacademy/SeleniumDownloadFile
Happy Testing!
Canberk Akduygu

Canberk Akduygu is a Test Lead working in the Netherlands
Thank you but how to download list of files
In order to download many files, you can loop over all web elements and click each of them one by one. By the way, I have updated the project and pushed all codes to github.