2

我正在使用 Selenium 的文件上传任务。

这里的问题是,上传文件需要 5-10 秒的时间。但我必须停止 Selenium 服务器,直到它完全上传。

这是一些示例代码。

selenium.type("id=Fileuploader","c:\\mypic.jpg");
selenium.click("id=submmit");

它给出了错误,因为该selenium.click语句在语句之后立即执行,selenium.type而没有等待文件完全上传。

那么,我应该在这里使用什么来停止 Selenium 服务器(服务器必须等待一段时间)?

4

3 回答 3

3

异步请求总是很难跟踪。文件上传的时候页面肯定有一些变化,所以找找,等着看。

您可以尝试waitForCondition()

或某种isElementPresent()魔术

final int TIMEOUT = 10000;  // ten seconds
long targetTime = System.currentTimeInMillis() + TIMEOUT;
while((System.currentTimeInMillis() < targetTime)) {
    if (selenium.isElementPresent("xpath=something")) {
        break;
    }
}

编辑:如果没有新元素,则至少必须进行某种更改。例如,如果您的异步上传更改了value某个隐藏input元素,您可以使用getValue()进行测试,或者只是一个智能定位器:

isElementPresent("xpath=//input[@type='hidden' and contains(@value,'mypic.jpg')]");

EDIT2:如果我们检查的元素(在这种情况下,图片预览)在上传之前就已经存在,那么它就是不可见的,我们可以通过isVisible()进行测试

于 2012-04-12T12:34:51.270 回答
1

如果最坏,你总是可以Thread.sleep()在代码中使用一些。但最好的方法是看高级用法——显式和隐式等待

于 2012-04-12T10:52:15.957 回答
0

上传文件后,新元素即将出现,显示已上传元素的预览。

所以,我用

selenium.isVisible("xpath of new preview element") 

把它放在循环中。它会起作用的。

谢谢你。

于 2012-04-13T10:14:38.430 回答