tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

SeleniumRCを使ってIEで画面キャプチャを撮る方法

そろそろ自社でSeleniumを使いたい感が出てきたのでいろいろ調べてブログに書くつもり。


今回の例はSeleniumRC 1.0 beta2の場合です。
(最初1.0 beta1でやってたけど挫折した)


最初に、全画面のキャプチャを撮りたい場合は以下のようなことはやらないでもcaptureScreenshot("filename.png")というメソッドを使えばできます。が、しかし、スクロールするような画面は撮れないというかなり残念なメソッドなのであまり使えないです。


スクロールする画面も撮りたいという場合、SnapsIEというActiveXコンポーネントが別途必要になります。
http://snapsie.sourceforge.net/


SnapsIEのインストール方法は、サイトに書かれた通りですけど、

でできます。後でコンポーネントから登録を解除したくなった時はregsvr32 /u Snapsie.dllでいけます。


コンポーネントを登録したら、snapsie.jsをtest以下にコピーしてtest以下にあるhtmlを開くと動作確認ができます。
htmlファイルを開くとActiveXコンポーネントは使わせないよというセキュリティの警告が出るので、有効にしてあげるとSaveボタンでキャプチャが撮れるようになります。


次に、このままでSeleniumテストを実行すると毎回キュリティ警告が出てしまい、毎度毎度かなり高度なマウス捌きが要求されてしまうので、テスト対象サーバを信頼済みサイトとして追加しておきます。設定はインターネットオプションのセキュリティタブで信頼済みサイトを選んでサイトボタンを押すと設定できます。こんな感じ。

注意:外部サーバをむやみに信頼済みにするのはけっこう危険なので気をつけてください


これで準備完了です。
後は以下のコードのようにテスト中にcaptureEntirePageScreenshot("filename.png")という感じで呼び出してあげると画面をキャプチャしてファイルに保存してくれます。

SeleniumIETest.java

package example.test;

import junit.framework.TestCase;

import org.openqa.selenium.server.RemoteControlConfiguration;
import org.openqa.selenium.server.SeleniumServer;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;

public class SeleniumIETest extends TestCase {
	public static int PORT = 4444;
	static {
		// テスト対象サーバへの接続にProxyが必要な場合のみ設定
		System.setProperty("http.proxyHost", "proxy.tanamon.jp");
		System.setProperty("http.proxyPort", "8080");
	}

	private SeleniumServer server;

	public void setUp() throws Exception {
		SeleniumServer.setAvoidProxy(true);
		server = new SeleniumServer(false);
		RemoteControlConfiguration config = server.getConfiguration();
		config.setMultiWindow(true);
		config.setPort(PORT);
		server.start();
	}

	public void testIEClient() {
		String baseUrl = "http://www.google.co.jp";
		Selenium client = new DefaultSelenium("localhost", PORT, "*iexploreproxy", baseUrl);
		client.start();

		// 検索画面で検索
		client.open(baseUrl + "/webhp?hl=ja");
		client.type("q", "selenium");
		client.click("btnG");
		client.waitForPageToLoad("30000");
		assertEquals("selenium - Google 検索", client.getTitle());

		// 画面キャプチャを撮る
		client.captureEntirePageScreenshot("C:\\capture1.png", "");

		client.stop();
	}

	public void tearDown() {
		server.stop();
	}
}

キャプチャされた画面