我正在创建selenium ide测试,现在我遇到了问题。我无法编写从本地磁盘上传文件的测试。
我的dropzone看起来像:http://www.dropzonejs.com/examples/simple.html
有人可以帮助我吗?
我遇到了同样的问题,我在这里找到答案: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;
}
希望这可以帮助!
您可以使用上面的答案中使用convertFileToBase64String方法运行JS脚本的java代码。你需要提供4个参数:
这是完整的解决方案:
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); "
);