Bird
Raised Fist0
Selenium Javatesting~15 mins

File download handling in Selenium Java - Build an Automation Script

Choose your learning style10 modes available
Verify file download functionality on the sample download page
Preconditions (2)
Step 1: Open the browser and navigate to 'https://example.com/download'
Step 2: Locate the download button with id 'downloadBtn'
Step 3: Click the download button
Step 4: Wait for the file to be downloaded completely in the default download folder
✅ Expected Result: The file named 'samplefile.txt' is downloaded successfully to the default download folder
Automation Requirements - Selenium WebDriver with Java
Assertions Needed:
Verify the file 'samplefile.txt' exists in the download folder after clicking the download button
Best Practices:
Use explicit waits to wait for the download button to be clickable
Use Java File API to check file existence
Clean up downloaded files after test to keep environment clean
Use Page Object Model to separate page interactions
Automated Solution
Selenium Java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.File;
import java.time.Duration;

public class FileDownloadTest {
    private static final String DOWNLOAD_PATH = System.getProperty("user.home") + "/Downloads/";
    private static final String FILE_NAME = "samplefile.txt";

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        WebDriver driver = new ChromeDriver();
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

        try {
            driver.get("https://example.com/download");

            // Wait for download button to be clickable
            WebElement downloadButton = wait.until(ExpectedConditions.elementToBeClickable(By.id("downloadBtn")));

            // Delete file if already exists to avoid false positive
            File file = new File(DOWNLOAD_PATH + FILE_NAME);
            if (file.exists()) {
                file.delete();
            }

            // Click the download button
            downloadButton.click();

            // Wait for the file to appear in the download folder
            boolean isDownloaded = waitForFileToExist(file, 15);

            // Assertion
            if (isDownloaded) {
                System.out.println("Test Passed: File downloaded successfully.");
            } else {
                System.out.println("Test Failed: File not found after download.");
            }

            // Clean up downloaded file
            if (file.exists()) {
                file.delete();
            }

        } finally {
            driver.quit();
        }
    }

    private static boolean waitForFileToExist(File file, int timeoutSeconds) {
        int waited = 0;
        while (waited < timeoutSeconds) {
            if (file.exists()) {
                return true;
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                return false;
            }
            waited++;
        }
        return false;
    }
}

This test script uses Selenium WebDriver with Java to automate the file download verification.

First, it opens the browser and navigates to the download page URL.

It waits explicitly for the download button to be clickable using WebDriverWait and ExpectedConditions.

Before clicking, it deletes any existing file with the same name in the download folder to avoid false positives.

After clicking the download button, it waits up to 15 seconds for the file to appear in the download folder by checking file existence every second.

If the file is found, it prints a pass message; otherwise, a fail message.

Finally, it cleans up by deleting the downloaded file and closes the browser.

This approach uses explicit waits for UI elements and Java File API for file verification, following best practices for maintainable and reliable tests.

Common Mistakes - 4 Pitfalls
Using Thread.sleep() to wait for the download button instead of explicit waits
{'mistake': 'Hardcoding the download folder path instead of using system properties', 'why_bad': 'Hardcoded paths may not work on different machines or OS, reducing test portability.', 'correct_approach': 'Use System.getProperty("user.home") to build the download path dynamically.'}
Not cleaning up downloaded files after test execution
Not verifying the file name or just checking download folder is not empty
Bonus Challenge

Now add data-driven testing with 3 different file download buttons and expected file names

Show Hint

Practice

(1/5)
1. What is the main purpose of handling file downloads in Selenium tests?
easy
A. To verify that files are downloaded correctly without manual intervention
B. To upload files to the web application
C. To change the browser's homepage
D. To clear browser cookies automatically

Solution

  1. Step 1: Understand file download handling

    File download handling in Selenium is used to check if files are saved correctly during automated tests.
  2. Step 2: Identify the correct purpose

    Among the options, only verifying file downloads matches this purpose.
  3. Final Answer:

    To verify that files are downloaded correctly without manual intervention -> Option A
  4. Quick Check:

    File download handling = verify downloads [OK]
Hint: File download handling checks saved files, not uploads [OK]
Common Mistakes:
  • Confusing download handling with file upload
  • Thinking it changes browser settings unrelated to downloads
  • Assuming it clears cookies automatically
2. Which Java code snippet correctly sets Chrome options to automatically download files to a folder without popup?
easy
A. ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-popup-blocking");
B. ChromeOptions options = new ChromeOptions(); options.setHeadless(true);
C. ChromeOptions options = new ChromeOptions(); Map prefs = new HashMap<>(); prefs.put("download.default_directory", "/path/to/download"); options.setExperimentalOption("prefs", prefs);
D. ChromeOptions options = new ChromeOptions(); options.addArguments("--start-maximized");

Solution

  1. Step 1: Identify how to set download folder in ChromeOptions

    Setting the "download.default_directory" preference in ChromeOptions disables popup and sets download path.
  2. 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.
  3. Final Answer:

    ChromeOptions options = new ChromeOptions(); Map prefs = new HashMap<>(); prefs.put("download.default_directory", "/path/to/download"); options.setExperimentalOption("prefs", prefs); -> Option C
  4. Quick 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]
Hint: Use prefs map with "download.default_directory" for downloads [OK]
Common Mistakes:
  • Using addArguments instead of prefs for download folder
  • Setting headless mode does not affect downloads
  • Forgetting to set experimental options
3. Given the following code snippet, what will be the output if the file is downloaded successfully?
File file = new File("/downloads/report.pdf");
boolean isDownloaded = file.exists();
System.out.println(isDownloaded);
medium
A. false
B. Compilation error
C. FileNotFoundException
D. true

Solution

  1. Step 1: Understand file.exists() method

    The exists() method returns true if the file exists at the given path, false otherwise.
  2. Step 2: Analyze the scenario

    If the file "report.pdf" is downloaded successfully to "/downloads", file.exists() returns true and prints it.
  3. Final Answer:

    true -> Option D
  4. Quick Check:

    file.exists() = true if file present [OK]
Hint: file.exists() returns true if file is present [OK]
Common Mistakes:
  • Assuming file.exists() throws exception if file missing
  • Confusing boolean output with exceptions
  • Thinking it returns file content
4. You wrote this code to check file download but the test always fails. What is the likely issue?
File file = new File("/downloads/report.pdf");
assertTrue(file.exists());
Options:
medium
A. The test does not wait for the download to complete before checking
B. The file path is incorrect syntax in Java
C. assertTrue is not a valid assertion method
D. File class cannot check file existence

Solution

  1. Step 1: Identify timing issue in file existence check

    The test may check file existence before download finishes, causing false failure.
  2. Step 2: Understand need for wait or polling

    Adding wait or retry logic ensures file is fully downloaded before assertion.
  3. Final Answer:

    The test does not wait for the download to complete before checking -> Option A
  4. Quick Check:

    Wait for download before assertTrue(file.exists()) [OK]
Hint: Always wait for download to finish before checking file [OK]
Common Mistakes:
  • Assuming file path syntax is wrong
  • Thinking assertTrue is invalid
  • Believing File class can't check existence
5. You want to verify a file download in Selenium Java tests for multiple file types (.pdf, .csv, .xlsx) saved in the same folder. Which approach best ensures correct file download handling?
hard
A. Check only the file size of the last downloaded file without verifying extension
B. Set browser to download automatically, then check folder for new file with expected extension after triggering download
C. Use Thread.sleep(5000) after download trigger and assume file is saved
D. Manually open the download popup and click save for each file type

Solution

  1. Step 1: Configure browser for automatic downloads

    Setting browser preferences to auto-download files avoids popup interruptions for all file types.
  2. 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.
  3. Final Answer:

    Set browser to download automatically, then check folder for new file with expected extension after triggering download -> Option B
  4. Quick Check:

    Auto-download + check file extension = reliable verification [OK]
Hint: Auto-download + check folder for new file extension [OK]
Common Mistakes:
  • Relying on manual popup handling in automated tests
  • Using fixed sleep without checking file presence
  • Ignoring file extension verification
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard