How to Verify File Download in Selenium Webdriver Java
Selenium is an
open-source web-based automation tool that is
implemented using a web driver. We will be using geckodriver because Selenium 3 enables
geckodriver as the default WebDriver implementation for Firefox.
Pre-requisites:
- geckodriver.exe
- maven dependency selenium
<dependency>
<groupid>org.seleniumhq.selenium</groupid>
<artifactid>selenium-java</artifactid>
<version>4.1.1</version>
</dependency>
Steps:
The following 9 steps will automate the process:
-
Set
webdriver.gecko.driverand its'pathas a system property. - Set the firefox diver.
- Typecast web driver as Javascript executor.
- Browse the website.
- Get the download button and click then wait to start downloading.
- Open the downloads section of the browser using the web driver.
- Get the file name of the most recent file by executing the following script containing the javascript path:
- Wait for the file to be downloaded.
- Check from the downloads local directory, if that file exists.
return document.querySelector('#contentAreaDownloadsView .downloadMainArea .downloadContainer description:nth-of-type(1)').value
Let’s see all the above steps in the code. We will use
js.executeScript(String script) function to get file name
for verification.
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.File;
import java.sql.Time;
import java.time.Duration;
import java.util.Random;
public class VerifyFileDownload {
public static String GECKODRIVER_PATH = "F:\\WORK\\SeleniumShortTasks\\VerifyFileDownload\\src\\main\\resources\\resources\\geckodriver.exe";
public static Random r = new Random();
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", GECKODRIVER_PATH);
WebDriver driver = new FirefoxDriver();
JavascriptExecutor js = (JavascriptExecutor) driver;
//get the firefox browser & get the file downloaded
String siteLink = "https://sourceforge.net/projects/idmwithcrack/";
driver.get(siteLink);
//Get Download Button
WebElement downloadButton = driver.findElement(By.cssSelector("a.button.download.big-text.green"));
downloadButton.click();
//wait , until file started downloading : 7-9 sec
System.out.println("wait, until file started downloading");
threadWait(7, 9);
//open the downloads section of firefox
driver.get("about:downloads");
//get the most recent file name
String fileName = (String) js.executeScript("return document.querySelector('#contentAreaDownloadsView .downloadMainArea .downloadContainer description:nth-of-type(1)').value");
//wait, expecting file to be downloaded , after 15-20 sec :
System.out.println("wait, expecting file to be downloaded.");
threadWait(15, 20);
//verify from Downloads Directory is this file exists
String FILES_DIRECTORY = "C:\\Users\\Momin-PC\\Downloads";
File Folder = new File(FILES_DIRECTORY);
File[] allFiles = new File(Folder.getPath()).listFiles();
for (File file : allFiles) {
String eachFile = file.getName();
if (eachFile.contains(fileName))
System.out.println("--Verified: File : " + fileName + " Has Been Download.");
else continue;
}
}
public static void threadWait(int low, int high) {
int num = getRandomNumber(low, high);
System.out.println(num + " sec Thread Wait : Started");
try {
Thread.sleep(1000 * num);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(num + " sec Thread Wait : Ended");
}
public static int getRandomNumber(int low, int high) {
int num = r.nextInt(high - low) + low;
return num;
}
}
Output:
- source code
- geckdriver.exe

Comments
Post a Comment