3

我必须使用 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。

处理这个问题的最好方法(正确方法)是什么?

谢谢!

4

1 回答 1

2

FluentWait课程专为此类情况而设计。我注意到您实际上只是在尝试复制本课程中已经完成的内容。

下面是它的来源:

https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/support/ui/FluentWait.java

它非常通用,因此可以处理各种不同的条件——包括你的。

您需要做的只是file.exists()apply方法中检查,如示例文档中所示:

http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/support/ui/FluentWait.html

于 2013-12-04T22:52:59.990 回答