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.driver
and its'path
as 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