Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Test if a file has been downloaded Selenium/C# (Google Chrome)

Tags:

c#

selenium

I'd like to click on a button that downloads a file on click, and test whether the expected file has been downloaded.

I've already googled this, but unfortunately didn't find any specific answer on this topic, lots of posts I found, are outdated (2014), I bet Selenium must've changed the API definition by now.

like image 342
Naughty Ninja Avatar asked Apr 07 '16 07:04

Naughty Ninja


2 Answers

This code verifies if the file is downloaded and then deletes it.

private static bool CheckFileDownloaded(string filename)
{
    bool exist = false;
    string Path = System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Downloads";
    string[] filePaths = Directory.GetFiles(Path);
    foreach (string p in filePaths)
    {
        if(p.Contains(filename))
        {
            FileInfo thisFile = new FileInfo(p);
            //Check the file that are downloaded in the last 3 minutes
            if (thisFile.LastWriteTime.ToShortTimeString() == DateTime.Now.ToShortTimeString() ||
            thisFile.LastWriteTime.AddMinutes(1).ToShortTimeString() == DateTime.Now.ToShortTimeString() ||
            thisFile.LastWriteTime.AddMinutes(2).ToShortTimeString() == DateTime.Now.ToShortTimeString() ||
            thisFile.LastWriteTime.AddMinutes(3).ToShortTimeString() == DateTime.Now.ToShortTimeString())
            exist = true;
            File.Delete(p);
            break;
        }
    }
    return exist;
}

Hope this helps. Code in C#.

like image 70
Sudeepthi Avatar answered Sep 30 '22 05:09

Sudeepthi


Use below code:-

import org.openqa.selenium.By;
import java.io.File;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class FileDownloadVerify {

 private WebDriver driver;

 private static String downloadPath = "D:\\siva";
 private String URL="http://all-free-download.com/free-photos/download/in_love_cosmos_flower_garden_220378.html";

 @BeforeClass
 public void testSetup() throws Exception{
  driver = new FirefoxDriver(firefoxProfile()); 
  driver.manage().window().maximize();
 }

  @Test
 public void example_VerifyExpectedFileName() throws Exception {
  driver.get(URL);
     driver.findElement(By.xpath(".//*[@id='detail_content']/div[2]/a")).click();

     Thread.sleep(10000);
     File getLatestFile = getLatestFilefromDir(downloadPath);
     String fileName = getLatestFile.getName();
     Assert.assertTrue(fileName.equals("in_love_cosmos_flower_garden_220378.zip"), "Downloaded file name is not matching with expected file name");
 }


 @AfterClass
 public void tearDown() {
  driver.quit();
 }
public static FirefoxProfile firefoxProfile() throws Exception {

  FirefoxProfile firefoxProfile = new FirefoxProfile();
  firefoxProfile.setPreference("browser.download.folderList",2);
  firefoxProfile.setPreference("browser.download.manager.showWhenStarting",false);
  firefoxProfile.setPreference("browser.download.dir",downloadPath);
  firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","application/zip");

  return firefoxProfile;
 }
public boolean isFileDownloaded(String downloadPath, String fileName) {
 boolean flag = false;
    File dir = new File(downloadPath);
    File[] dir_contents = dir.listFiles();

    for (int i = 0; i < dir_contents.length; i++) {
        if (dir_contents[i].getName().equals(fileName))
            return flag=true;
            }

    return flag;
}

private boolean isFileDownloaded_Ext(String dirPath, String ext){
 boolean flag=false;
    File dir = new File(dirPath);
    File[] files = dir.listFiles();
    if (files == null || files.length == 0) {
        flag = false;
    }

    for (int i = 1; i < files.length; i++) {
     if(files[i].getName().contains(ext)) {
      flag=true;
     }
    }
    return flag;
}

private File getLatestFilefromDir(String dirPath){
    File dir = new File(dirPath);
    File[] files = dir.listFiles();
    if (files == null || files.length == 0) {
        return null;
    }

    File lastModifiedFile = files[0];
    for (int i = 1; i < files.length; i++) {
       if (lastModifiedFile.lastModified() < files[i].lastModified()) {
           lastModifiedFile = files[i];
       }
    }
    return lastModifiedFile;
}
}

Hope it will help you :)

like image 22
Shubham Jain Avatar answered Sep 30 '22 06:09

Shubham Jain