【问题标题】:Java - wait for a file to download with partial filenameJava - 等待文件以部分文件名下载
【发布时间】:2019-07-08 19:21:11
【问题描述】:

我正在尝试使用 fluent wait 等待下载文件。但由于文件以不同的日期格式下载。我想使用 fluentWait 验证文件的“部分文件名”。例如:cancelled_07092019、cancelled_09_07_2019。所以这里的文件名 'canceled_' 保持不变

以下代码适用于实际文件名。

Downloaded_report= new File("DownloadPath");
FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver);
        wait.pollingEvery(1, TimeUnit.SECONDS);
        wait.withTimeout(15, TimeUnit.SECONDS);
        wait.until(x -> downloaded_report.exists());

在这里,我想检查文件名的开头。我该怎么做呢? 提前致谢

【问题讨论】:

  • 您是否检查过这个post,这将确保脚本等待文件下载完成。
  • 嗨,Supputuri,是的,我浏览了这篇文章,但我在这里使用的代码也可以正常工作。但唯一的事情是,我想检查“partial_file_name”是否存在,而不是使用流利等待的实际存在。
  • 您的意思是检查文件名是否包含您传递的“部分文件名”?
  • 是的,如果您看到提供的示例 - 文件名的前半部分保持不变。所以,我想根据我将传递的“部分名称”检查文件是否存在。

标签: java selenium selenium-webdriver


【解决方案1】:

我不确定我是否正确理解了这个问题,但您可以检查给定目录中是否存在具有部分名称的文件。

File dir = new File("DownloadPath");
String partialName = downloaded_report.split("_")[0].concat("_"); //get cancelled and add underscore
FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver);
        wait.pollingEvery(1, TimeUnit.SECONDS);
        wait.withTimeout(15, TimeUnit.SECONDS);
        wait.until(x -> {
            File[] filesInDir = dir.listFiles();
            for (File fileInDir : filesInDir) {
                if (fileInDir.getName().startsWith(partialName)) {
                    return true;
                }
            }
            return false;
        });

在上面的代码中,我们列出了下载路径目录下的所有文件。然后,遍历每个文件,获取其名称并检查它是否包含我们想要的部分名称。

如果目录中有多个报告,可能会出现问题。然后我建议在某种@Before 钩子中从以cancelled_ 开头的文件中清除DownloadPath

【讨论】:

  • 非常感谢,正是我正在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
相关资源
最近更新 更多