将带有selenium ide的文件上传到Dropzone.js

问题描述 投票:3回答:2

我正在创建selenium ide测试,现在我遇到了问题。我无法编写从本地磁盘上传文件的测试。

我的dropzone看起来像:http://www.dropzonejs.com/examples/simple.html

有人可以帮助我吗?

selenium-ide dropzone.js
2个回答
2
投票

我遇到了同样的问题,我在这里找到答案:How to interact with Dropzone using selenium

我使用了大部分内容,但我必须创建自己的方法才能正确转换为base64。

public static String convertFileToBase64String(String fileName) throws IOException {

        File file = new File(fileName);
        int length = (int) file.length();
        BufferedInputStream reader = new BufferedInputStream(new FileInputStream(file));
        byte[] bytes = new byte[length];
        reader.read(bytes, 0, length);
        reader.close();
        String encodedFile = Base64.getEncoder().encodeToString(bytes);

        return encodedFile;
    }

希望这可以帮助!


0
投票

您可以使用上面的答案中使用convertFileToBase64String方法运行JS脚本的java代码。你需要提供4个参数:

  1. Dropzone元素的ID(例如“VUIDropzone96326-dropzone”)
  2. 要上载的文件的新名称(有时服务器需要特定名称)
  3. 您要上传的文件路径
  4. base64您从convertFiles ToBase64String方法获得的文件字符串

这是完整的解决方案:

    String id = "Put here the ID of the Dropzone element"
    String fileName = "Put here desired file name";
    String base64IFile = convertFileToBase64String(filePath);
    ((JavascriptExecutor) driver).executeScript("var myZone = Dropzone.forElement('#" + id + "');" +
            "base64Image = '" + base64IFile + "';" +
            "function base64toBlob(b64Data, contentType, sliceSize) {  \n" +
            "    contentType = contentType || '';\n" +
            "    sliceSize = sliceSize || 512;\n" +
            "\n" +
            "    var byteCharacters = atob(b64Data);\n" +
            "    var byteArrays = [];\n" +
            "\n" +
            "    for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n" +
            "        var slice = byteCharacters.slice(offset, offset + sliceSize);\n" +
            "\n" +
            "        var byteNumbers = new Array(slice.length);\n" +
            "        for (var i = 0; i < slice.length; i++) {\n" +
            "            byteNumbers[i] = slice.charCodeAt(i);\n" +
            "        }\n" +
            "\n" +
            "        var byteArray = new Uint8Array(byteNumbers);\n" +
            "\n" +
            "        byteArrays.push(byteArray);\n" +
            "    }\n" +
            "\n" +
            "    var blob = new Blob(byteArrays, {type: contentType});\n" +
            "    return blob;\n" +
            "}" +
            "var blob = base64toBlob(base64Image, 'image / png');" +
            "blob.name = '" + fileName + "';" +
            "myZone.addFile(blob);  "
    );
© www.soinside.com 2019 - 2024. All rights reserved.