Validate Excel file is downloaded in Selenium Web driver Java - java

I'm able to download excel file by clicking Download button which comes under DOM ,
after that i want verify downloaded file is same one.
AUTO IT is not allowed in project.
I have tried below code for verification on local but if i will push this code to repo.
then user path will get change and code will fail.
`String filepath = "C:User\\Dhananjay\\Downloads";
String fileName = "report.xlsx"
File targetFile = new File(fileName,filePath);
if(! targetFile.exists())'
{
system.out.println("File is verified")`
}else{
system.out.println("file not downloaded")
}'

String userProfile = System.getProperty("user.home"); returns %USERPROFILE% variable.
So you can use String filepath = System.getProperty("user.home") + "\\Downloads";
Works even on Linux.

I have found way to validate on local path and it's generic one
File folder = new File(System.getProperty("user.home") +\\Downloads);
File[] listOfFiles = folder.listFiles();
boolean found = false;
File f = null;
for (File listOfFile : listOfFiles) {
if (listOfFile.isFile()) {
String fileName = listOfFile.getName();
System.out.println("File " + listOfFile.getName());
if (fileName.matches("5MB.zip")) {
f = new File(fileName);
found = true;
}
}
}
Assert.assertTrue("Downloaded document is not found",found );
f.deleteOnExit();

Related

Create a folder like WhatsApp Images, WhatsApp Videos in Albums or Gallery

My requirement is to show directory under Gallery/ Albums,
creating a directory in the following way does not full fill my requirement...
File rootPath = new File(Environment.getExternalStorageDirectory(), "directoryName");
if(!rootPath.exists()) {
rootPath.mkdirs();
}
final File localFile = new File(rootPath,fileName);
by using this code i can see the folder by using "file mangaer" with the path...
"deviceStorage/directoryName" but the folder is not visible under Gallery or Albums
for directory creation i tried the following ways too...
1)File directory = new File(this.getFilesDir()+File.separator+"directoryName");
2)File directory = new File (Environment.getExternalFilesDir(null) + "/directoryName/");
3)File directory = new File(Environment.
getExternalStoragePublicDirectory(
(Environment.DIRECTORY_PICTURES).toString() + "/directoryName");
but no luck, please help me friends
thanks in advance.
check this solution as well:
String path = Environment.getExternalStorageDirectory().toString();
File dir = new File(path, "/appname/media/app images/");
if (!dir.isDirectory()) {
dir.mkdirs();
}
File file = new File(dir, filename + ".jpg");
String imagePath = file.getAbsolutePath();
//scan the image so show up in album
MediaScannerConnection.scanFile(this,
new String[] { imagePath }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
if(Config.LOG_DEBUG_ENABLED) {
Log.d(Config.LOGTAG, "scanned : " + path);
}
}
});
Try this one.
File root = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + File.separator + "albums");
boolean rootCreated = false;
if (!root.exists())
rootCreated = root.mkdir();
You can use MediaStore API to save your media files like that:
val values = ContentValues().apply {
put(MediaStore.Images.Media.DISPLAY_NAME, "filename")
put(MediaStore.Images.Media.RELATIVE_PATH, "${Environment.DIRECTORY_DCIM}/$directoryName")
put(MediaStore.Images.Media.MIME_TYPE, mimeType)
}
val collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
val item = context.contentResolver.insert(collection, values) ?: throw IOException("Insert failed")
resolver.openFileDescriptor(item, "w", null)?.use {
writeImage(it.fileDescriptor)
}
This will save the media files to the media collections and make it available to the gallery. Gallery app normally shows your directoryName as an album.
Checked on Samsungs S10 and above with Android 10.
heres the java.nio library way to create directory
Java Code
File targetFile = new File(Environment.getExternalStorageDirectory(), "subDir");
Path sourceFile = Paths.get(targetFile.getAbsolutePath());
Files.createDirectory(sourceFile);
some android phone create .nomedia file inside the created app folder to prevent media from being shown in gallery app so you may check if this hidden file exists and delete it if it exists. set folder and files readable. you may wait quite time before system reflect your created file in your gallery app.
val parentFile = File(Environment.getExternalStorageDirectory(), "MyAppFolder")
if(!parentFile.exists())
parentFile.mkdir()
parentFile.setReadable(true)
// .nomedia file prevents media from being shown in gallery app
var nomedia = File(parentFile, ".nomedia")
if(nomedia.exists()){
nomedia.delete()
}
val file = File(parentFile , "myvideo.mp4")
file.setReadable(true)
input.use { input ->
var output: FileOutputStream? = null
try {
output = FileOutputStream(file)
val buffer = ByteArray(4 * 1024)
var read: Int = input.read(buffer)
while (read != -1) {
output.write(buffer)
read = input.read(buffer)
}
output.flush()
// file written to memory
} catch (ex: Exception) {
ex.printStackTrace()
} finally {
output?.close()
}
}

How to match file in directory when match with temp.getstat using java

I'm writing java coding if file 'id' in sql server table matches filename of file on local directory..how to scan the file and check the filename is match without using for loop.
String pathJ = "C:\\sampleDirectory";
NewsContentObj[] newObj = firstTimeRetrieveRecordFromDB();
for (NewsContentObj temp : newObj) {
File dir = new File("C:\\sampleDirectory");
File[] files = dir.listFiles();
Arrays.sort(files);
for (File file : files){
String path1 = file.getAbsolutePath();
String path = file.getName();
if(temp.getStat().equals(file)){
System.out.println("first path:" + file );
//System.out.println("first path1:" + files[i].getName());
cacheStaticL(pathJ,path);
}
//}
}
}
Thanks
You can use bellow code to check if file exist in given directory
boolean check = new File(directory, temp).exists();

Cannot extract jar file in java application packaged for windows

My program was created in Netbeans 8.0.2. The program is supposed to create a (database) folder after installation and extract the contents of a (database) jar file from its library. The folder gets created quite okay, but the contents of the jar file do not get extracted.
How can I get the extraction of the jar file to work?
NB: When I run the program in Netbeans, everything goes well.
Sample Code:
String appHomeDir = new java.io.File(".").getCanonicalPath();
String destDir = appHomeDir + "/database";
File folder = new File(destDir);
if (!folder.exists()) {
folder.mkdir();
String current = new java.io.File(".").getCanonicalPath();
String jarFile = current + "\\app\\lib\\database.jar";
java.util.jar.JarFile jar = new java.util.jar.JarFile(jarFile);
java.util.Enumeration enumEntries = jar.entries();
while (enumEntries.hasMoreElements()) {
java.util.jar.JarEntry file = (java.util.jar.JarEntry) enumEntries.nextElement();
java.io.File f = new java.io.File(destDir + java.io.File.separator + file.getName());
if (file.isDirectory()) { // if its a directory, create it
f.mkdir();
continue;
}
java.io.InputStream is = jar.getInputStream(file); // get the input stream
java.io.FileOutputStream fos = new java.io.FileOutputStream(f);
while (is.available() > 0) { // write contents of 'is' to 'fos'
fos.write(is.read());
}
fos.close();
is.close();
}
}
So the "database" directory gets created but the contents of "database.jar" do not get extracted.
Problem solved: I replaced "/app/lib/database.jar" with "/lib/database.jar"

how to delete the same file which is uploaded in a directory?

there is folder temp to which the files uploaded by users are stored. the file name is same for each user but the content is different. Each user uploads a file called abc.xlsx. now when "A" user uploads abc.xlsx file after processing that file should be deleted. But currently i am deleting all the files in the folder. which is a problem since one more user might be uploading the file ehich will be cleared too. So i was thinking of renaming the file by appending the username to the file and then delete that particular file.
This is the file upload:
ProcessForm uploadForm = (ProcessForm)form;
String folderpath = "servers/temp";
String filePath = folderpath + "/" + uploadForm.getUploadedFile().getFileName();
This will delete all the files in the folder:
String tempPath = folderpath;
File file = new File(tempPath);
File[] files = file.listFiles();
for (File f:files)
{
if (f.isFile() && f.exists())
{
f.delete();
}
}
I think i got it. This is working as expected:
String folderpath = "servers/temp";
String filePath = folderpath + "/" + "abc_"+user.getUsername()+".xlsx";
outputStream = new FileOutputStream(new File(filePath));
outputStream.write(uploadForm.getUploadedFile().getFileData());
Code to delete file:
File file = new File(filePath);
boolean fileDelete = file.delete();
if (fileDelete)
{
mLogger.debug("successfully deleted");
} else {
mLogger.error("cant delete a file");
}

Move inside a particular directory without knowing its name

I want to move inside a directory in Java but I don't know its name? Does Java provide any functionality to do so?
File srcFile = "C:/Entertainment/XXXXXXX/break.avi"
I am certain that there is only one directory inside Entertainment but I don't know its name. How can I move inside XXXXXXX directory to access any file inside it?
Any help?
Try,
File file = new File("C:/Entertainment");
File[] files = file.listFiles();
File srcDir = new File("C:/Entertainment/");
File srcFile = null;
for (File dirMember : srcDir.listFiles()) {
if (!dirMember.isDirectory()) {
continue; // we don't need regular files
}
if (dirMember.getName().equals(".")) {
continue; // we don't need this directory
}
if (dirMember.getName().equals("..")) {
continue; // we don't need the parent directory
}
// This is the one you need.
srcFile = new File(new File(srcDir, dirMember.getName()), "break.avi");
}
You could also use a FileFilter, e.g one from Commons IO
File dir = new File("C:/Entertainment/");
File[] files = dir.listFiles( DirectoryFileFilter.INSTANCE ); // returns all subdirs
srcFile = new File(files[0], "break.avi");
File srcFile = new File("C:\\Entertainment");
srcFile = new File(srcFile, srcFile.list()[0]);
srcFile = newFile(srcFile, "break.avi");
System.out.println(srcFile.getPath());
File outer= new File("C:/test");
File inner = outer.listFiles()[0];//if you are sure there is one
File[] listOfFilesInInnerMost = inner.listFiles();
System.out.println("Files: " + Arrays.asList(listOfFilesInInnerMost));
will print
Files: [C:\test\something\text (2).txt, C:\test\something\text (3).txt, C:\test\something\text.txt]

Categories

Resources