前回、Selenium を使用して自動でブラウザを操作させてみました。
今回は自動操作に加え、スクリーンショットを取りたいと思います。
各種バージョンはこちら。
Java : 11
Spring Tool Suite(IDE): 4.3.2
Selenium Server : 3.9.1
スクリーンショットをファイルで保存
結論から言うと「WebDriver#getScreenshotAs(OutputType
TakesScreenshot (selenium-api 2.52.0 API)
このメソッドを使うことにより、File・Byte[]・BASE64 の文字列のいずれかのインスタンスを取得できます。
File を選択した場合、png ファイルがシステムの TEMP 領域に取得されます。プログラムが終了すると自動で消されてしまうので、コピーを取っておく必要があります。
システムの TEMP 領域は Windows の場合、コマンドプロンプトを起動し「set temp」で確認できます。
C:\Users\yyama>set temp TEMP=C:\Users\yyama\AppData\Local\Temp
さっそく前回のソースにスクリーンショット取得のコードを追加してみました。
package org.yyama.selenium_sample; import java.io.File; import java.io.IOException; import java.nio.file.Files; import org.openqa.selenium.By; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; /** * Hello world! * */ public class App { public static void main(String[] args) throws IOException { // WebDriver が存在するパスを指定する。プロジェクト直下においてあれば不要。 // System.setProperty("webdriver.gecko.driver", "C:/org/yyama/geckodriver.exe"); // WebDriver を取得する WebDriver driver = new FirefoxDriver(); // Google の検索ページを開く driver.get("http://www.google.com"); // 検索文字を入力するテキストボックスを取得 WebElement element = driver.findElement(By.name("q")); // 検索文字を入力する element.sendKeys("5兆円おくれ"); // サブミット element.submit(); // ページタイトルが変わるまで待つ。10 秒待っても変わらない場合、 // org.openqa.selenium.TimeoutException」が発生する。。 (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith("5兆円おくれ"); } }); // スクリーンショットを取得し、ファイルを退避する。 ← ← ← ここを追加。 File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); Files.copy(file.toPath(), new File("D:/yyama/" + file.getName()).toPath()); // ブラウザを閉じる。(ここでは勝手に閉じないようにコメントにしてある) // driver.quit(); } }
これを実行すると D:\yyama に「screenshot250604932438781944.png」ファイルが格納され、開くと次のような画像が表示されました。
まとめ
前回のプログラムに 2 行を追加するだけでスクリーンショットが取れるようになりました。
ただ、この方法だとスクロールが必要な画面では画面全体を保存することが出来ません。
また、スクリーンショット画像に URL を含めたい場合などもありますよね。
これらの課題にもいずれ対応していきたいです。
それでは!

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)
- 作者: 伊藤望,戸田広,沖田邦夫,宮田淳平,長谷川淳,清水直樹,Vishal Banthia
- 出版社/メーカー: 技術評論社
- 発売日: 2016/02/02
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る

- 作者: Satya Avasarala,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/09/18
- メディア: 大型本
- この商品を含むブログ (5件) を見る