You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:25:19