![](/img/trans.png)
[英]Open app e.g. Word then open file via FireFox (for WebDav integration)
[英]Programmatically upload / add file via Dropzone e.g. by Selenium
我正在编写一个 Selenium 测试用例,其中一个步骤是通过 Dropzone.js 上传文件。
(因为 Selenium 可以在浏览器中运行 Javascript,所以如果它可以在 Javascript 中以编程方式完成,那也很好。)
我想避免一路模拟打开文件浏览器窗口、选择文件等,因为这超出了 Web 驱动程序可以处理的范围并且变得非常复杂。 在伪代码中,我想做这样的事情:
1. Select some Dropzone element 2. Set file path 3. Submit (upload the file)
在现有问题( 无法在 http://www.dropzonejs.com 上使用 python selenium webdriver 上传文件)中提到了一种可能的方法,它使用“dz-hidden-input”元素(DOM 文件输入)。
不幸的是它不起作用(至少不是在当前版本的 Dropzone 中) - 在将文件设置为元素后,Dropzone .files 仍然是空的,并且没有上传。
在查看 Dropzone 源代码后,我通过扩展上述内容提出了一个可行的解决方案:
1. Set file path in the "dz-hidden-input" element 2. Use javascript to retrieve the File object from the element 3. Pass the file to dropzone.addFile(file)
但我担心的是这真的是一个黑客,因为 hidden-input 和 .addFile 都没有记录,如果 Dropzone 更改实现等,测试将在未来中断。
有没有更好的/记录的方法来做到这一点?
(澄清 - 我正在尝试上传一个新文件,而不是像 Dropzone 常见问题中提到的那样显示现有文件)
单击输入按钮 -> 使用 Web 驱动程序剪贴板/java 机器人 -> 粘贴/键入文件位置 + 文件名 > 点击机器人输入。
final String fileName = "textfile.txt";
final String filePath = "\\data\\public\\other\\" + fileName;
zUploadFile (filePath );
public void zUploadFile (String filePath) throws HarnessException {
// Put path to your image in a clipboard
StringSelection ss = new StringSelection(filePath);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
// OR use java robot for entire filepath
Thread.sleep(10000);
// Imitate mouse events like ENTER, CTRL+C, CTRL+V
Robot robot;
try {
robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.