はじめに
Webアプリのテストや操作履歴の記録において、「実際にどう動いたか」が一目で分かる画像付きログは非常に便利です。JavaとSeleniumを使えば、各ステップごとのスクリーンショットを自動で保存し、ログファイルと連携することが可能です。
この記事では、操作ステップの自動記録+スクリーンショット保存の仕組みを、コード付きで解説します。
前提条件・準備
必要なライブラリ
- Java 11 以降
- Selenium WebDriver(v4.x推奨)
- ChromeDriver(または他のブラウザ用Driver)
Maven依存関係の例
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.18.1</version>
</dependency>
スクリーンショット付きログの基本構成
操作ごとに以下の処理を行います
- 操作内容をテキストログに記録
- スクリーンショットをPNG形式で保存
- ログに画像ファイル名も記録
サンプルコード:ログ出力と画像保存
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.*;
import java.nio.file.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class SeleniumScreenshotLogger {
public static void main(String[] args) throws Exception {
WebDriver driver = new ChromeDriver();
Logger logger = new Logger("operation_log");
try {
driver.get("https://example.com");
logger.log(driver, "サイトを開きました");
WebElement link = driver.findElement(By.linkText("About"));
link.click();
logger.log(driver, "Aboutリンクをクリックしました");
} finally {
driver.quit();
logger.close();
}
}
static class Logger {
private final PrintWriter logWriter;
private final Path imgDir;
private int step = 1;
private final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss");
Logger(String baseName) throws IOException {
imgDir = Files.createDirectories(Paths.get("logs", baseName, "images"));
Path logFile = Paths.get("logs", baseName, "log.txt");
Files.createDirectories(logFile.getParent());
logWriter = new PrintWriter(Files.newBufferedWriter(logFile));
}
void log(WebDriver driver, String message) throws IOException {
String timestamp = LocalDateTime.now().format(dtf);
String filename = String.format("step%02d_%s.png", step++, timestamp);
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
Path dest = imgDir.resolve(filename);
Files.copy(screenshot.toPath(), dest, StandardCopyOption.REPLACE_EXISTING);
logWriter.printf("[%s] %s (画像: %s)%n", timestamp, message, filename);
}
void close() {
logWriter.close();
}
}
}
ログ出力例(log.txt)
[2025-06-01_103512] サイトを開きました (画像: step01_20250601_103512.png)
[2025-06-01_103515] Aboutリンクをクリックしました (画像: step02_20250601_103515.png)
応用例
- 操作ログをHTMLレポート化する(画像タグで埋め込み)
- テストケースとの統合(JUnit+Selenium)
- CIツールと連携して自動保存
まとめ
JavaとSeleniumを使えば、ブラウザ操作の各ステップを画像付きで記録することができます。特にテスト自動化や操作証跡の保存において、再現性・可視性が向上します。
操作内容の可視化をしたい方や、不具合報告をしやすくしたい開発チームには非常に有効な手法です。