我必须使用 Selenium 测试一个 Web 应用程序。该应用程序有一个用于下载文件的链接。我设置了一个 Firefox 配置文件,以便浏览器下载文件而不要求确认。我的(简化的)Java 代码如下:
File file = new File("myPath");
driver.findElement(By.id("file-link-download-")).click(); // the download start here
// my test
if(!file.exists()) fail("file does not exist");
我的问题是下载在另一个线程中运行,并且当执行“我的测试”(如果 file.exists())时,该文件尚未下载。我可以将它打包成一种延迟的方法,如下所示:
public boolean fileExists(File file) {
try {// Just wait 1000 milliseconds to see if the file exists
Thread.sleep(sleep);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
if (file.exists()) {
return true;
}
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
return false;
}
但这并不好,也不够。我认为最好的方法应该是有一个带有超时的单独线程,它监视文件是否已经下载,然后返回 true 或者如果存在超时则返回 false。
处理这个问题的最好方法(正确方法)是什么?
谢谢!