seleniumでWebサイトのテストを自動化するとき、スクリーンショットを保存することが多々あると思います。固定のファイル名にすると、2回目に動かすときは、一度取得したキャプチャファイルを削除しておかないと正しく動いてくれません。
画面名と取得日時を組み合わせたファイル名にすると、あとから見返す時も見やすく、改めて実行するときもファイル名が重複せずにそのまま実行できます。
//スクリーンキャプチャを取得
File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
//現在日時を取得
Date date = new Date();
//フォーマットを変換
SimpleDateFormat sdf = new SimpleDateFormat("yyyy'年'MM'月'dd'日'E'曜日'k'時'mm'分'ss'秒'");
//指定の場所に保存
try {
Files.copy(file.toPath(), new File("C:\\Users\\user\\selenium\\ScreenCapture\\" + "スクリーンキャプチャ" + sdf.format(date) + ".png").toPath());
} catch (IOException e1) {
e1.printStackTrace();
}
実行後、「スクリーンキャプチャ2019年12月25日水曜日23時36分44秒.png」のようなファイルが保存されます。
スクリーンキャプチャを取得するだけでは、一時ファイルになってしまうので、保存するには明示的に保存場所、ファイル名とともに保存しないといけません。
現在日時を取得後に日時のフォーマットを変換していますが、変換しないと時刻のところに「:」(コロン)が入ってしまい、ファイル名として使えないため変換しています。日本語でなくてもファイル名として使用可能な文字種なら何でも大丈夫です。
最後、保存の際に使用している.toPathは、ファイルパスに変換してくれるものです。file.toPath()で、一時ファイルをファイルパスとして指定して、newFile~のファイルパスにコピーして保存しています。
まとめ
今回はスクリーンショットの保存について日時を利用する方法を紹介しました。
特に加工しない場合はランダムなファイル名になってしまい、何のキャプチャなのか分かりにくくなってしまいます。
固定ファイル名では連続して実行できないなど問題点がありますが、日時を利用するとスマートに対策できるので、お困りの場合はぜひ活用してみてください。
Originally posted 2019-12-25 23:49:26.