Selenium Change Download Directory Chrome

Profile picture for user arilio666

When we hit that download button in every browser, a download popup appears, and the file gets saved in a default location called downloads. This is a pretty common scenario for download and its download path.

What if I want the download to happen in another place?

  • Selenium download path is also the same as the local download path it saves in the downloads folder.
  • Selenium can change the default download directory.
  • When done manually, it is useless as the driver always opens up with default settings.
  • It won't be the same as when we made the change.
  • So it has to be in the programming level change.

Let's say I want the file in my project directory.

How can we do that?

We can achieve this by using the chromeoptions class.

Today for this article purpose, we will download the edge driver and save it in our project folder where chromedriver is present.

public class ChromeDirectory
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.chrome.driver", "D:\\Work_Stuff\\ChromeDriver\\chromedriver.exe");

        Map<String, Object> prefs = new HashMap<String, Object>();
        prefs.put("download.default_directory",System.getProperty("user.dir") + File.separator + "ChromeDriver" + File.separator + "BrowserDownloadedFiles");
        
        ChromeOptions options = new ChromeOptions();
        options.setExperimentalOption("prefs", prefs);
        
        ChromeDriver driver= new ChromeDriver(options);
        driver.get("https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/");
        
        WebElement downLoad = driver.findElement(By.xpath("//a[@aria-label='x64 stable channel, version 97.0.1072.76']"));
        downLoad.click();
    }
}
  • First, we are initializing the chromedriver path.
  • Also, we are creating an object called prefs in the form of a hashmap.
  • We put some keys and values into prefs. In this case, we are adding the syntax meant to change the download path matching chromeoptions.
  • The path user.dir delivers the current path.
  • The object for chromeoptions is now created with object name options and using that options. We set experimental options to prefs as it contains the path and initializing.
  • Pass it to that and declare the driver object to invoke the selenium methods to access it.
  • Once we click download now, the options object, which we can call chromeoptions, directly maps to the prefs path we provided and save the downloaded file into that path.
  • File.separator is used as this will support other OS platforms too.