我想单击单击时下载文件的按钮,并测试是否已下载预期的文件。
我已经用谷歌搜索过这个,但不幸的是没有找到关于这个主题的任何具体答案,我找到的很多帖子都已经过时了(2014 年),我敢打赌 Selenium 现在一定已经改变了 API 定义。
一个简单的解决方案是使用文件观察程序来检测文件的创建。它允许您等待下载开始和完成:
string folder = Environment.GetEnvironmentVariable("USERPROFILE") + "\\Downloads";
using (var watcher = new FileSystemWatcher(folder)) {
// wait for new file to be created
var result = watcher.WaitForChanged(WatcherChangeTypes.Created, 5000);
if (result.TimedOut)
throw new WebDriverTimeoutException("Dowmload failed");
Console.WriteLine("Download started for : " + Path.Combine(folder, result.Name));
// wait for the temporary file to be deleted
var result2 = watcher.WaitForChanged(WatcherChangeTypes.Deleted, 10000);
if (result2.TimedOut)
throw new WebDriverTimeoutException("Dowmload failed");
Console.WriteLine("Download finished for : " + Path.Combine(folder, result.Name));
}
使用以下代码:-
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;
}
}
希望这对你有帮助:)
这段代码验证文件是否被下载,然后删除它。
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;
}
希望这有所帮助。C#中的代码。
问题内容: 我正在做一个拼字游戏程序 在下面的示例中,我下面的代码使用SQLite作为简单数据库来存储我的单词。 但是,它告诉我无法重新创建数据库表。 如何检查是否已经存在一个名为的表,然后跳过尝试创建表的操作? 错误: 编码: 问题答案: 您要查找的查询是: 因此,代码应如下所示: SQLite 3.3+的一个方便的替代方法是使用更智能的查询来创建表: 从文档中: 试图在已经包含相同名称的表,索
问题内容: 如何测试是否已在python中导入模块? 例如,我需要基础知识: 也 谢谢! 感谢您的所有评论 问题答案: 如果您不想通过两次导入来进行优化,请避免麻烦,因为Python已经解决了这一问题。 如果您 需要 避免此类情况:修正草率的编码- 确保不需要,即在使用之前定义(导入)所有内容(在导入的情况下:一次,在启动时,在模块级别) 。 如果您确实有充分的理由:是一个包含所有已导入到某处的模
问题内容: 我正在使用某些文件,并且想知道是否存在一种检查文件是否为图像的方法? 问题答案: 这对我来说很好。希望我能帮上忙
问题 你想测试一个文件或目录是否存在。 解决方案 使用 os.path 模块来测试一个文件或目录是否存在。比如: >>> import os >>> os.path.exists('/etc/passwd') True >>> os.path.exists('/tmp/spam') False >>> 你还能进一步测试这个文件时什么类型的。 在下面这些测试中,如果测试的文件不存在的时候,结果都会返
问题内容: 我需要编写一个自定义的批处理文件重命名器。我已经完成了大部分工作,除了我不知道如何检查文件是否已经打开。我只是在使用软件包,并且有一种方法,但是似乎无法测试该文件是否正在被另一个程序使用。关于如何进行这项工作的任何想法? 问题答案: 使用Apache Commons IO库…
如果文档ID不存在,我想将数据添加到firestore数据库中。到目前为止,我一直在尝试: 目标是检查数据库中的所有文档ID,并查看与“varuId”变量的任何匹配。如果匹配,则不会创建文档。如果不匹配,它应该创建一个新文档