如何实现Selenium WebDriver每次运行测试时新建截图文件夹?
解决方案
核心思路
每次测试启动时,在指定根目录下创建一个以当前时间戳命名的专属子文件夹,后续所有截图都保存到这个文件夹里,避免不同测试的截图混放。
修改后的代码示例
import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class ScreenshotUtils { // 定义根目录(可根据实际路径修改) private static final String BASE_SCREENSHOT_DIR = "C:\\Users\\Kiko Kikostov\\IdeaProjects\\AboutPagesBanerScreenSizes\\15inchScreenSize\\Asia"; // 存储本次测试的专属截图文件夹 private static File currentTestScreenshotDir; // 初始化测试专属文件夹(在测试开始时调用一次) public static void initTestScreenshotDir() { // 用测试启动的时间戳作为文件夹名,确保唯一性 String testTimestamp = new SimpleDateFormat("dd_MM_yyyy__hh_mm_ss").format(new Date()); currentTestScreenshotDir = new File(BASE_SCREENSHOT_DIR, testTimestamp); // 如果文件夹不存在则创建(包括父目录) if (!currentTestScreenshotDir.exists()) { currentTestScreenshotDir.mkdirs(); } } // 截图方法 static void captureScreenshot(String fileName) throws IOException { // 先检查专属文件夹是否已初始化,未初始化则自动触发 if (currentTestScreenshotDir == null) { initTestScreenshotDir(); } // 捕获截图 File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); // 生成截图文件名(保留时间戳区分同测试内的不同截图) String screenshotTimestamp = new SimpleDateFormat("dd_MM_yyyy__hh_mm_ss").format(new Date()); File targetFile = new File(currentTestScreenshotDir, fileName + " " + screenshotTimestamp + ".png"); // 复制截图到目标位置 Cache.copyFile(scrFile, targetFile); } }
关键说明
initTestScreenshotDir()方法:在每次测试开始时调用一次,创建本次测试的专属文件夹。如果忘记调用,截图方法会自动触发初始化。mkdirs()方法:自动创建所有不存在的父目录,避免因路径层级问题导致创建失败。- 保留截图文件名内的时间戳:区分同一次测试中不同步骤的截图,方便后续排查问题。
- 根目录定义为常量:便于统一修改存储路径。
内容的提问来源于stack exchange,提问作者dejan kostov
相关产品推荐
相关产品推荐

