如何在selenium webdriver

时间:2018-01-10 21:08:39

标签: selenium-webdriver file-upload

我正在寻找有关如何在selenium webdriver中最好地处理文件上传失败的任何想法。

最近我在我的webdriver测试套件中看到了更多的失败,我试图解决的错误是因文件上传失败导致Internet Explorer测试失败。

在webdriver中,我知道将文件上传到输入元素的唯一方法是使用SendKeys()方法并将文件路径传递给SendKeys()这就像chrome和firefox中的魅力一样,但定期在Internet Explorer中遇到过问题。似乎发生了什么是文件上传窗口被打开但路径没有输入,也没有上传文件。这使节点打开了一个文件上传窗口,这是一个本机窗口的窗口而不是网页selenium无法与弹出窗口进行交互。 enter image description here

结果是HttpWebRequest没有得到响应,触发WebdriverTimoutException。这会导致会话清理。当会话终止时,这会导致套件中所有其他测试出现级联故障。

环境信息:

  • Selenium.Webdriver& Seleneium.Support版本3.7.0
  • IEDriver 3.7.0
  • 在IE 11中进行测试

2 个答案:

答案 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或其他任何内容。

你应该能够通过捕获某些例外来检测坏状态。