Selenium框架中File.separator被转义为%5c导致文件上传失败
Selenium文件上传中File.separator转%5c导致文件找不到的解决办法
问题根源
你的代码里Utils.class.getClassLoader().getResource(filename).getFile()返回的是URL编码后的路径字符串——Windows系统下的File.separator是反斜杠\,会被URL编码成%5c。用这个编码后的字符串创建File对象并取绝对路径时,并不会自动解码,最终传给SeleniumsendKeys的路径里就带着%5c,导致系统找不到文件。
而用正斜杠/定义路径时,URL编码后还是/,所以不会触发这个问题;读取json/properties文件时没出问题,是因为那些场景大概率直接用了getResourceAsStream()读取流,没有经过getFile()转File的步骤,自然不会有编码残留。
修复代码
把parseFilenamesForMultipleUpload方法里的路径获取逻辑改成用URL.toURI()来处理,它会自动解码URL编码的字符:
public String parseFilenamesForMultipleUpload(@NotNull Collection<String> filenames) { return String.join("\n", filenames .stream() .map(filename -> { try { URL resourceUrl = Objects.requireNonNull(Utils.class.getClassLoader().getResource(filename)); return new File(resourceUrl.toURI()).getAbsolutePath(); } catch (URISyntaxException e) { throw new RuntimeException("Failed to resolve file path", e); } }) .toList()); }
额外优化点
另外注意多文件上传的分隔符,你之前用的是" \n "(空格+换行+空格),其实Selenium多文件上传只需要用**换行符\n**分隔即可,不需要额外加空格,避免可能的路径解析问题。
这样修改后,不管用File.separator还是正斜杠定义路径,最终生成的绝对路径都会是系统识别的正确格式,Selenium就能正常找到文件了。
内容的提问来源于stack exchange,提问作者hetacz
相关产品推荐
相关产品推荐

