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