我正在寻找有关如何在selenium webdriver中最好地处理文件上传失败的任何想法。
最近我在我的webdriver测试套件中看到了更多的失败,我试图解决的错误是因文件上传失败导致Internet Explorer测试失败。
在webdriver中,我知道将文件上传到输入元素的唯一方法是使用SendKeys()
方法并将文件路径传递给SendKeys()
这就像chrome和firefox中的魅力一样,但定期在Internet Explorer中遇到过问题。似乎发生了什么是文件上传窗口被打开但路径没有输入,也没有上传文件。这使节点打开了一个文件上传窗口,这是一个本机窗口的窗口而不是网页selenium无法与弹出窗口进行交互。
结果是HttpWebRequest
没有得到响应,触发WebdriverTimoutException。这会导致会话清理。当会话终止时,这会导致套件中所有其他测试出现级联故障。
环境信息:
答案 0 :(得分:1)
我可能会迟到回答这个问题,但有人会受益。
有问题的文件应该在运行程序的计算机(无论是本地服务器还是远程服务器)上可用,例如,在/ resources目录中
在本地计算机上,这应该可以。
chooseFileElement.waitForVisible().type("/file/path/filename.jpg");
clickButton("Attach File");
但是,在远程服务器上,您需要将LocalFileDetector的新实例与<input type=file>
元素相关联。
LocalFileDetector detector = new LocalFileDetector();
File localFile = detector.getLocalFile("/file/path/filename.jpg");
RemoteWebElement input = (RemoteWebElement) myDriver().findElement(By.id("fileUpload"));
input.setFileDetector(detector);
input.sendKeys(localFile.getAbsolutePath());
clickButton("Attach File");
答案 1 :(得分:0)
这实际上取决于你编写代码的方式。我要做的是当你走到最后并发现你已经陷入了糟糕的状态,例如文件|打开对话框已打开,关闭对话框并启动脚本的该部分。我不确定在你的情况下重新启动是什么意思......也许这意味着重新加载页面并从那里开始......也许这意味着只需再次.sendKeys()
INPUT
。
您应该可以通过向页面发送ESC来关闭对话框。您应该可以在.sendKeys()
标记上使用BODY
或其他任何内容。
你应该能够通过捕获某些例外来检测坏状态。