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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:54:03