Gaurav
Gaurav

Reputation: 111

How to verify that file is downloaded successfully or not in Selenium?

I am using Chrome. While clicking on a button, it's downloading a file in the "Downloads" folder (without any Download window pop-up, otherwise I can try with the AutoIT tool also). Now I need to verify that file is downloaded successfully or not. Later I need to verify the content of that file. Content of file should match what appears on the GUI.

Upvotes: 1

Views: 8131

Answers (3)

Rambalaji
Rambalaji

Reputation: 1

 public boolean isFileDownloaded(String filename) throws IOException
 {
         String downloadPath = System.getProperty("user.home");
         File file = new File(downloadPath + "/Downloads/"+ filename);
         boolean flag = (file.exists()) ? true : false ;
         return flag;
 }

Upvotes: 0

PDHide
PDHide

Reputation: 19929

The below line of code returns true or false if program.txt file exists:

      File f = new File("F:\\program.txt"); 
      f.exists();

you can use this inside custom expected condition:## to wait till the file is downloaded and present

using:

import java.io.File;

define the method inside any pageobject class

public ExpectedCondition<Boolean> filepresent() {
    return new ExpectedCondition<Boolean>() {
        @Override
        public Boolean apply(WebDriver driver) {
            File f = new File("F:\\program.txt"); 
            return f.exists();
        }
        
        @Override
        public String toString() {
          return String.format("file to be present within the time specified");
        }
    };
}

we ceated a custom expected condition method now use it as:

and in test code wait like:

wait.until(pageobject.filepresent());

Output:

Failed:

enter image description here

Passed

enter image description here

Upvotes: 1

Norayr Sargsyan
Norayr Sargsyan

Reputation: 1868

public static boolean isFileDownloaded(String downloadPath, String fileName) {
   File dir = new File(downloadPath);
   File[] dir_contents = dir.listFiles();

   if (dir_contents != null) {
       for (File dir_content : dir_contents) {
            if (dir_content.getName().equals(fileName))
                return true;
       }
   }

   return false;
}

You should provide in this method the fileName which you want to check(is downloaded or not) and the path where the download should happen To find the download path you can use:

public static String getDownloadsPath() {

   String downloadPath = System.getProperty("user.home");
   File file = new File(downloadPath + "/Downloads/");
   return file.getAbsolutePath();
}

Upvotes: 1

Related Questions