我不确定它是什么时候开始的,但是我的Selenium框架不再接受File.separator
的路径名,我必须使用反斜杠,否则我无法上传文件。
如果我输入路径如下:
String DOCX = "uploads" + File.separator + "mock" + File.separator + "document_donotparse.docx";
我得到这样一个错误:
invalid argument: File not found : C:\XXX\Arbeit\tests\build\resources\test\uploads%5cmock%5cdocument_donotparse.docx
基本上File.separator
会转换为%5c
下面是我使用的代码:
public void uploadFiles(@NotNull List<String> filenames, By input, By progressBar, FileType fileType) {
log.trace("Uploading files: {}", filenames);
getExistingElement(input).sendKeys(Utils.parseFilenamesForMultipleUpload(filenames));
throwIfParsingFailed(fileType);
waitForAllElementsToDisappear(progressBar);
}
由于我还需要一次上传多个文件,所以我需要util函数:
public String parseFilenamesForMultipleUpload(@NotNull Collection<String> filenames) {
return String.join(" \n ", filenames
.stream()
.map(filename -> new File(Objects.requireNonNull(
Utils.class.getClassLoader().getResource(filename)).getFile()).getAbsolutePath())
.toList());
}
到目前为止,唯一起作用的基本上是修改代码,使用“正常”的反斜杠:
String DOCX = "uploads/mock/document_donotparse.docx";
但是,我希望再次使用File.separator
。
此外,我在阅读json
或properties
文件时完全没有问题,这些文件的路径也是用File.separator
分隔的,所以问题一定出在上传代码的某个地方。
1条答案
按热度按时间5lhxktic1#
多亏了@hiren,我精确地指出了解析到
%5c
的地方是parseFilenamesForMultipleUpload
,所以我添加了URLDecoder
来去掉百分比,并创建了我自己的方法removePath
来删除文件的路径部分,而不管文件分隔符的类型如何。下面是代码:
parseFilenamesForMultipleUpload
是非常相似的我只是添加了更多的Map,使它更干净,并通过decodeQuery
方法添加了Map,它只是简单地转换百分比。Utils#getFile
只是从先前版本的parseFilenamesForMultipleUpload
方法中提取的一些代码,以便于说明:然后我用
File#getPath
代替之前的File#AbsolutePath
再次Map它,最后decodeQuery
转换百分比样式。Utils#decodeQuery
:最后我用一个换行符加入它们。
然后,为了能够从文件路径中提取文件名,我创建了这样的方法:
其中
cutFilePath
为:一切正常:)