2012年6月11日月曜日

hudsuckr.exe

Selenium-Webdriverを使用してブラウザのプロキシ設定を行い起動する方法は
3つある

1.WebDriverインスタンス生成時の起動オプション(ChromeOption、FirefoxProfileなど)を
使用する
→詳細は過去記事を参照。
2.別手段でプロキシの設定をしておく
2-1.IEのオプションから事前に設定する
手動でIEの設定を変更してから、Selenium-WebDriverを実行する
2-2.起動時にのみ設定を書き換える
Selenium-WebDriver実行前にbatやvbsでオプションを変更する。
終了した後は、元に戻しておくのが吉
ex)http://d.hatena.ne.jp/tanamon/20090417/123993594



1が一番お手軽。
2は、テスト以外のブラウザを介した通信もプロキシ経由になってしまうため、
その他の業務に支障が出る可能性がある。

しかしながら1を実装しようとした際、FireFox、Chromeは大丈夫なものの、
IEはhudsuckr.exeという外部実行モジュールが必要になる。
このモジュール、ChromedriverやIEServerDriverと違い、自由に配置場所を設定することが
出来ない。
どうやらSeleniumの中に含まれているWindowProxyManagerかFileHandlerクラスと同じ階層にhudsuckr/hudsuckr.exeという決まった形式でファイルを配置する必要がある。
要はjarの中に埋め込まないといけない。

おとなしく2の方法を選んだほうが賢いような気がする。

2012年6月10日日曜日

>>1さん

別にスレ立てした人のことを指してるわけじゃない。

金曜日に引き続き、またもseleniumの安定新バージョンがアップされた。
その名もselenium2.23.1
何だよ、『.1』って。その1には何がこめられているのか。

変更ログにも何にも書いてない。ちょっと前にもスモールスモールバージョンが
アップされたことがあったけど、本当につまらないことしか変わってなかった。
そして今回も、使わなくなったどうしようもない、そしてどうでもいい
publicメソッド(*)を1つ消しただけだった。
なんてこった。

最近、selenium小芝居(アップグレード詐欺)に踊らされてる。
当分は2.22のままで大丈夫な予感。
無料なだけに、文句が言えない。ただより高いものはない。

*FirefoxProfileクラスのisRunnungメソッドというクラス。
 内部的には起動中のFireFoxのプロファイルディレクトリに存在するparentlockという
 ファイルを参照し、動作中かどうか判断する機能を持っている。
 2.23で廃止された、実行中は永久待機する不具合を発生させるメソッドからコールされていた。
 今はもう、どこからも参照されていない。

2012年6月9日土曜日

selenium2.23は見ちゃ駄目


たぶん出すのが早すぎたんでしょう。
先週に引き続き、新たなselenium安定バージョンが出荷された。
バージョン番号は2.23、

ソース比較したけど、お粗末様な部分を急遽修正した感じ。


一番大きいのはFireFoxの挙動。
処理中かどうか判断するために、ローカルのロックファイルを参照するが、
それが存在している場合、永久待機を命じられる部分が削除された。当たり前だ。

あんたFireFox13に対応すましたと言いたいだけちゃうんかと。

2.22以下のバージョンを使っていて、たまにFireFoxが止まったり、操作不能になったり、
フリーズしたりするって人はアップデートしてもいいかもしれない。

あと、起動時の処理も変わっているけど、起動オプションから余計なものを
削除しているだけなので、こっちはあんまり気にしないでいいと思う。
どんな実装したら、この修正の恩恵を受けれるかわからないぐらい、
どうでもいい部分。


あとはSafariDriverにはっきりとBetaのアノテーションがつきました。
いや、わかってるから。いまさら言われてもという感じ。
不具合報告掲示板(issues)がsafariの声で盛り上がっているから、その処置だと思う。
そんなこと言い出したら、selenium自体がBetaだろうよ。

まじかよクソ箱売ってくる。

2012年6月2日土曜日

seleniumの2.22(その6 イベント方式)

WebDriverにはイベント方式の概念として下記の2つが存在する


synthesized events
Javascriptを使って一連のイベントを合成し、あたかもユーザーがその操作をしたのと
同じように動作させる概念

Native events
ユーザがWebアプリケーションに対する操作を正確にエミュレートするという概念


当然前者は実際に操作するわけではないから、本当の意味でテストできているわけではない。
selenium2.21まででいうとFireFoxはNativeで動作していたが、IEはsynthsizedで動作していた。
IEが他のブラウザよりselenium実行速度が遅いのはこれが原因の一つでもある。
2.22からIEもNativeで動作しているので、本当の意味で『エミュレート』出来ていることとなる

IEをあえてsynthsizedで動作させたいときは
DesiredCapabilities capability = DesiredCapabilities.internetExplorer();
capability.setCapability("enableNativeEvents",false);
WebDriver driver = new InternetExplorerDriver(capability);
とすればいい、やる意味ないけど。




2012年6月1日金曜日

seleniumの2.22(その5 スクショとか色とか)

エラー発生時に自動的にスクショを取得することが出来る。
独自実装でも可能だが、すきにして。

やり方
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability("webdriver.remote.quietExceptions",true);
CommandExecutor executor = new SeleneseCommandExecutor(
                                           new DefaultSelenium("localhost",
                                           4444,
                                           "*safari",
                                           "http://localhost"));
 WebDriver driver = new RemoteWebDriver(executor, capabilities);

http://code.google.com/p/selenium/wiki/DesiredCapabilities
ここにも記述してあるが、どうやらRemoteWebDriver限定らしい。

あと、画面に表示されている色情報も取得できる。
 WebElement ele = driver.findElement(By.id("id"));
 Color iro = Color.fromString(ele.getCssValue("background-color"));
 iro.asRgb();//rgb取得   rgb(10, 100, 200)
 iro.asHex();//16進数取得 #000000

便利な世の中ですね。