Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaとSelenium WebDriverでPrintScreen(スクリーンショット)操作をシミュレートする方法

Seleniumでは、キーボードのPrintScreen(プリントスクリーン)ボタンの操作をシミュレートすることができます。PrintScreenボタンは画面のスクリーンショットを撮影するためのものであり、Seleniumでも同様に画面全体を画像として取得できます。

テスト実行中にスクリーンショットを自動的に保存しておくことは、テスト失敗時の原因分析(障害解析)において非常に重要なステップです。エビデンスとして残すことで、どの時点で・どのような状態で失敗したのかを後から確認できるようになります。

Seleniumでスクリーンショットを撮影する流れは、大きく次の3つのステップで構成されます。

  1. WebDriverオブジェクトをTakesScreenshotインターフェースへキャストする
  2. getScreenshotAsメソッドを使って画像ファイルとして取得する
  3. FileUtils.copyFileメソッドで任意の場所にファイルをコピーして保存する

1. TakesScreenshotインターフェースへのキャスト

まず、driverオブジェクトをTakesScreenshotインターフェース型に変換します。これにより、スクリーンショット撮影用のメソッドが使えるようになります。

構文

TakesScreenshot s = (TakesScreenshot)driver;

2. getScreenshotAsメソッドで画像を取得する

次に、getScreenshotAsメソッドを呼び出すことで、スクリーンショットが一時的な画像ファイルとして生成されます。その後、FileUtils.copyFileメソッドを使用して、そのファイルを指定したパスへコピー・保存します。

構文

File sp = s.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(sp, new File("画像ファイルの保存先パス"));

コード例

以下は、Chromeブラウザでページを開き、画面全体のスクリーンショットを「logopage.png」というファイル名で保存する完全なサンプルコードです。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.apache.commons.io.FileUtils;
import java.io.File;

public class PrintScreenSimulate {
   public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver",
      "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
      WebDriver driver = new ChromeDriver();
      driver.get("https://www.tutorialspoint.com/index.htm");

      // スクリーンショットの撮影
      File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

      // 取得した画像を指定の場所に保存
      FileUtils.copyFile(src, new File("logopage.png"));

      driver.quit();
   }
}

補足ポイント

  • commons-ioライブラリが必要: FileUtilsクラスを使用するには、Apache Commons IOのJARファイルをプロジェクトのクラスパスに追加してください。Mavenを利用している場合は、commons-ioを依存関係に追加します。
  • OutputType.FILE以外も選択可能: OutputType.BYTESOutputType.BASE64を指定すれば、バイト配列やBase64文字列としてスクリーンショットを取得することもできます。
  • 要素単位のスクリーンショットも可能: WebElementにもgetScreenshotAsメソッドがあるため、ページ全体ではなく特定の要素だけを撮影したい場合にも対応できます。

このように、SeleniumのTakesScreenshotインターフェースを活用することで、PrintScreenボタンと同等の操作を自動化テストの中で簡単に実現できます。

  1. JavaのJWindowを使ってスプラッシュ画面を実装する方法

    JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ

  2. JavaでJSONファイルを作成する方法をわかりやすく解説

    JSON(JavaScript Object Notation)は、人間が読みやすい形式でデータを交換するために設計された、軽量なテキストベースのオープン標準フォーマットです。JSONの記法は、C、C++、Java、Python、Perlなど、多くのプログラミング言語に精通したプログラマーにとって馴染み深いものとなっています。 JSONドキュメントのサンプル 以下は、書籍情報を格納した典型的なJSONドキュメントの例です。 { book: [ { id: 01, language: Java, ed