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

标签 selenium file-upload

我上传了一个图像文件,想用 Selenium (java) 对其进行测试。用户有两个选择。他可以通过拖放从他的本地机器推送图像,或者他可以单击“浏览...”按钮。然后出现浏览器指定的文件选择器。

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'] 中写入文件路径是别无选择的,因为此输入是隐藏的。

最佳答案

隐藏文件输入在 FirefoxChrome 中不是问题。而且,v2.45.0.6 确保 IE 也能处理隐藏文件输入。使用 input[type='file'] 的简单 sendkeys() 应该适合您。参见 changelog

编辑

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

第二次编辑

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

关于带有隐藏输入的 Selenium 文件选择器 [type=file],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574916/

相关文章:

java - 无法使用括号中的数字导航到 DOM 中的目标标签,例如 div[4]

testing - Selenium:使用 selenium 网格存储屏幕截图

spring-mvc - 如何使用 Spring MVC 3 将图像上传数据作为 byte[] 使用

asp.net-mvc-3 - 如何在Windows Azure平台上传图片: best approach

php - CakePHP Ajax 图片上传

javascript - 在浏览器中自动执行操作

excel - selenium v​​ba从Web表中提取数据的最后一段代码复制文本不起作用

java - 运行 IE web 驱动程序时出现异常

file-upload - 何时检查 node.js 上传脚本中的文件大小/mimetype?

python - 如何在不使用 html 表单的情况下将文件发布到 django