繁体   English   中英

通过 Dropzone 以编程方式上传/添加文件,例如 Selenium

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM