带有隐藏输入的Selenium文件选择器[type = file]

时间:2015-06-01 13:31:19

标签: selenium file-upload

我有一个图片文件上传,想要用 Selenium(java)进行测试。用户有两个选择。他可以通过拖放本地机器来推动图像,也可以点击“浏览...”#34;按钮。然后出现浏览器指定的文件选择器。

Selenium 中,我尝试了不同的东西。据我所知, Selenium 不提供浏览器外的操作。因此,测试拖放功能不是一种可能的解决方案。

所以我尝试单击“浏览”按钮并使用浏览器指定的文件选择器。我找到了YouTube video,其中某人成功选择了此对话框中的文件。他带着机器人课在键盘上做了一些事情。

getDriver().findElement(By.id(BROWSE_BUTTON)).click();

Thread.sleep(5000);

StringSelection stringSelection = new StringSelection("C:\\A.JPG");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);

当我调试这行时,测试在第1行的click()方法之后处于待定状态。 我使用 Firefox 31.1

有什么想法吗?也许有一些替代品? 在input[type='file']中写入文件路径是无可奈何的,因为此输入是隐藏的。

1 个答案:

答案 0 :(得分:2)

隐藏文件输入不是 Firefox Chrome 的问题。并且, v2.45.0.6 确保 IE 也可以使用隐藏文件输入。如此简单sendkeys()使用input[type='file']应该没问题。见changelog

修改

对于FF,它也可能是兼容性问题。但是,Selenium尚不支持最新版本的FF。见this

第二次修改

Selenium 2.46已经发布,IEDriver现在应该使用隐藏文件输入标签。