Selenium::Remote::Driver でテキストの一部を反転させる方法



Perl のモジュール Selenium::Remote::Driver を使って Web 画面のスクリーンショットを取る時に、フォームの入力フィールドのテキストの一部を反転(選択された状態に)する方法。

自動スクリーンショットの例

このようなスクリーンショット画像を自動で取ります。

Selenium::Remote::Driver でテキストの一部を反転させる

Selenium::Remote::Driver でテキストの一部を反転させる

JavaScript を使って反転させる

Selenium::Remote::Driver 側からはこの操作はできなさそう(マウスの動きを指定してやればできるかもしれないが激しく面倒くさそう)なので、部分的に JavaScript を実行して行う。

テキスト反転サンプルコード

Selenium::Remote::Driver に execute_async_script というメソッドがあるので、ここに実行する JavaScript を指定。なお、スクリーンショットを取る目的なのでブラウザは Firefox 想定。多分 IE では動きません。(IE の人はここを見て下さい。)

#ここでテキスト入力

#テキストエリア選択
my $script = qq{
	var callback = arguments[arguments.length-1];
	var input = document.getElementById(arguments[0]); /* myTextArea */
	if ('selectionStart' in input) {
		input.selectionStart = arguments[1]; /* 5 */
		input.selectionEnd = arguments[2]; /* 13 */
	}
	callback(input);
};
my $callback = q{return arguments[0];}; #callbackは何でもよい

$driver->execute_async_script($script, 'myTextArea', 5, 13, $callback);

#ここでスクリーンショット