We handle file downloads in tests to check if files are saved correctly when users download them from a website.
File download handling in Selenium Java
FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("browser.download.folderList", 2); profile.setPreference("browser.download.dir", "C:\\Downloads"); profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf"); WebDriver driver = new FirefoxDriver(new FirefoxOptions().setProfile(profile));
Set preferences to avoid popup dialogs during download.
Specify the folder path where files will be saved.
FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("browser.download.folderList", 2); profile.setPreference("browser.download.dir", "C:\\Users\\User\\Downloads"); profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf"); WebDriver driver = new FirefoxDriver(new FirefoxOptions().setProfile(profile));
ChromeOptions options = new ChromeOptions(); Map<String, Object> prefs = new HashMap<>(); prefs.put("download.default_directory", "C:\\Downloads"); prefs.put("download.prompt_for_download", false); options.setExperimentalOption("prefs", prefs); WebDriver driver = new ChromeDriver(options);
This test opens Firefox with settings to download PDF files automatically to C:\Downloads. It navigates to a PDF URL to trigger the download, waits 5 seconds, then prints a confirmation message.
import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions; import org.openqa.selenium.firefox.FirefoxProfile; public class FileDownloadTest { public static void main(String[] args) throws InterruptedException { FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("browser.download.folderList", 2); profile.setPreference("browser.download.dir", "C:\\Downloads"); profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf"); FirefoxOptions options = new FirefoxOptions(); options.setProfile(profile); WebDriver driver = new FirefoxDriver(options); driver.get("https://example.com/sample.pdf"); // Wait for download to complete (simple wait for demo) Thread.sleep(5000); System.out.println("Download started and should be saved in C:\\Downloads"); driver.quit(); } }
Always set the correct MIME type in preferences to avoid download prompts.
Use absolute paths for download directories to avoid confusion.
Waiting for download completion can be improved by checking the file system instead of fixed sleep.
File download handling lets tests check if files save correctly.
Set browser preferences to download files automatically without popups.
Use waits or file checks to confirm downloads finish before assertions.
Practice
Solution
Step 1: Understand file download handling
File download handling in Selenium is used to check if files are saved correctly during automated tests.Step 2: Identify the correct purpose
Among the options, only verifying file downloads matches this purpose.Final Answer:
To verify that files are downloaded correctly without manual intervention -> Option AQuick Check:
File download handling = verify downloads [OK]
- Confusing download handling with file upload
- Thinking it changes browser settings unrelated to downloads
- Assuming it clears cookies automatically
Solution
Step 1: Identify how to set download folder in ChromeOptions
Setting the "download.default_directory" preference in ChromeOptions disables popup and sets download path.Step 2: Match code snippet with correct setting
ChromeOptions options = new ChromeOptions(); Map prefs = new HashMap<>(); prefs.put("download.default_directory", "/path/to/download"); options.setExperimentalOption("prefs", prefs); correctly creates prefs map and sets it as experimental option for ChromeOptions.Final Answer:
ChromeOptions options = new ChromeOptions(); Map prefs = new HashMap<>(); prefs.put("download.default_directory", "/path/to/download"); options.setExperimentalOption("prefs", prefs); -> Option CQuick Check:
Set prefs for download folder = ChromeOptions options = new ChromeOptions(); Map prefs = new HashMap<>(); prefs.put("download.default_directory", "/path/to/download"); options.setExperimentalOption("prefs", prefs); [OK]
- Using addArguments instead of prefs for download folder
- Setting headless mode does not affect downloads
- Forgetting to set experimental options
File file = new File("/downloads/report.pdf");
boolean isDownloaded = file.exists();
System.out.println(isDownloaded);Solution
Step 1: Understand file.exists() method
The exists() method returns true if the file exists at the given path, false otherwise.Step 2: Analyze the scenario
If the file "report.pdf" is downloaded successfully to "/downloads", file.exists() returns true and prints it.Final Answer:
true -> Option DQuick Check:
file.exists() = true if file present [OK]
- Assuming file.exists() throws exception if file missing
- Confusing boolean output with exceptions
- Thinking it returns file content
File file = new File("/downloads/report.pdf");
assertTrue(file.exists());
Options:Solution
Step 1: Identify timing issue in file existence check
The test may check file existence before download finishes, causing false failure.Step 2: Understand need for wait or polling
Adding wait or retry logic ensures file is fully downloaded before assertion.Final Answer:
The test does not wait for the download to complete before checking -> Option AQuick Check:
Wait for download before assertTrue(file.exists()) [OK]
- Assuming file path syntax is wrong
- Thinking assertTrue is invalid
- Believing File class can't check existence
Solution
Step 1: Configure browser for automatic downloads
Setting browser preferences to auto-download files avoids popup interruptions for all file types.Step 2: Verify download by checking folder for new file with expected extension
After triggering download, checking the folder for a new file with the correct extension confirms success reliably.Final Answer:
Set browser to download automatically, then check folder for new file with expected extension after triggering download -> Option BQuick Check:
Auto-download + check file extension = reliable verification [OK]
- Relying on manual popup handling in automated tests
- Using fixed sleep without checking file presence
- Ignoring file extension verification
Ready to prove it?
Pass the test and this pattern moves unknown
