Selenium Java如何获取当前项目根目录以正确保存测试截图
Java获取项目根目录存储截图解决方案
System.getProperty("user.dir")返回的是JVM启动时的工作目录,该值会随启动位置、运行环境配置变化,并不是固定返回项目根目录,所以会出现找不到预期路径的问题。
可行解决方案
以下是3种适配不同场景的解决方案:
方案1:基于类加载器获取类路径根(通用性最高,适配所有Java项目)
类加载器的资源根路径固定对应项目编译后的class文件根目录,不会随JVM启动位置变化,代码示例:// 获取类路径根目录地址 String classRootPath = this.getClass().getClassLoader().getResource("").getPath(); // 兼容Windows平台路径前缀异常问题 if (System.getProperty("os.name").toLowerCase().contains("win")) { classRootPath = classRootPath.substring(1); } // 拼接路径时用File.separator替代硬编码斜杠,兼容多操作系统 String saveDirPath = classRootPath + File.separator + "test-output" + File.separator + "ScreenshotsTC"; File saveDir = new File(saveDirPath); // 目录不存在时自动创建,避免路径不存在报错 if (!saveDir.exists()) { saveDir.mkdirs(); } File targetFile = new File(saveDir, "screenshots" + currentDate + ".png"); FileUtils.copyFile(scrFile, targetFile); System.out.println("File name is: " + testname + currentDate + ".png");也可以用
Paths工具类简化路径拼接逻辑,避免拼写错误:String fullSavePath = Paths.get(classRootPath, "test-output", "ScreenshotsTC", "screenshots" + currentDate + ".png").toString(); FileUtils.copyFile(scrFile, new File(fullSavePath));方案2:配置化存储路径(适合需要灵活调整存储位置的项目)
将截图存储路径写到配置文件中,比如config.properties里添加配置项:screenshot.save.dir=./test-output/ScreenshotsTC代码中读取配置项即可,后续调整路径无需修改业务代码。
方案3:修改IDE运行配置(仅适合本地调试场景)
如果你仅在本地IDE中运行时遇到该问题,可以直接修改运行配置的工作目录:
以IDEA为例,打开右上角Run/Debug Configurations,找到对应运行的启动类/测试用例,将Working directory配置项的值改为你本地项目的根目录路径,保存后运行System.getProperty("user.dir")就会返回项目根目录。
注意事项
不要硬编码/作为路径分隔符,Windows系统下路径分隔符为\,硬编码会导致跨平台运行报错,优先使用File.separator或者Paths工具类处理路径拼接。
内容的提问来源于stack exchange,提问作者Linu
相关产品推荐
相关产品推荐

