2012年7月20日金曜日
Androidに特化した(ドヤッ
FireFoxの14が動作しない現象に悩まされたと思ったら、あっけなくseleniumが
対応して、はや2日。
やんごとなき更新内容ログを見てみると、selenium2.25はFireFox17まで
対応しているとのこと。
未来を生きるgoogleさまは違います。
FireFox14はAndroidに特化しているらしい、その影響か、FirefoxDriverにも
大きな仕様変更が。
まぁその辺は後ほど。
とりあえず、2.25の最大の機能は最新版のFireFoxが動作するところにある。
まぁ、機能といっていいのか、当たり前のことだけれども。
その他細かな修正がいろいろと。
1.IEDriverServerのログ出力機能がついた
2.InternetExplorerDriverにInternetExplorerDriverServiceを指定できる
コンストラクタ追加されて、いろいろ細かく設定できるようになった
3.nativeEvents設定なるものが追加された
4.FirefoxDriverにCapabilitiesが複数指定できるようになった(なんで?)
5.unhandled alerts(アドオンが発する予期せぬエラー的な、、)の制御が出来るようになった
6.BASIC認証とDIGEST認証がどうのこうのといいだした。その影響で出来たと思われる
UserAndPasswordっていう謎の構造体クラスが出現した。
上に書いたものについてはおいおい実装方法なども紹介していきたい。
後はどうでもいいけど
SeleneseCommandExecutorのブラウザ判定が変更したり、
「JavascriptExecutor#executeAsyncScriptに変な引数わたすな!」って書いてあったり、
「WebElement#clearにマウスやキーボードイベントを発生させることは期待するな。
backspaceやtabのsendKeysを考慮しろ」って書いてあったり、
FatalChromeException・InternetExplorerElement・FirefoxWebElementがもうすぐなくなったり、
SafariDriverにようやくCapabilitiesが指定できるようになったり、
「driver.manage().window().setSize(new Dimension(400,400))」で落ちるバグがなくなったり、
firefoxのsubmitが安定したり、
WebElement#getCssValueに注意書き(仕様変更?)があって、これからはrgbaの時代だぜって
いってたり(そのおかげでまさかのColorクラスに大幅な仕様変更)、
AlertクラスにauthenticateUsingっていうよくわからないメソッド追加されてたり、
俺は2.26からはIEDriverServer.exeを使用しないで起動することをやめるぞーーーーっていってたり、
ChromeDriverServiceでchromedriverの保持方法変わったりとか。
おなかいっぱいですわ。
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の方法を選んだほうが賢いような気がする。
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で廃止された、実行中は永久待機する不具合を発生させるメソッドからコールされていた。
今はもう、どこからも参照されていない。
金曜日に引き続き、またも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);
とすればいい、やる意味ないけど。
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
便利な世の中ですね。
独自実装でも可能だが、すきにして。
やり方
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
便利な世の中ですね。
2012年5月31日木曜日
seleniumの2.22(その4 DriverService)
差分が発生しているjavaファイルを開き、著作権表記のみが
変わっていることを確認する簡単なお仕事です。
さてさて、Chromeだけではなく、本バージョンから新たにIEにも
DriverServerが出現した。
Chromeの時は特に動作速度に問題がなかったためスルーした
(というよりも勝手にChromeDriverがDriverServerを使用する)が、
IEは遅いため、使用してもいいかもしれない、というより、
使用しないとエラーになる。
以下やり方
System.setProperty( InternetExplorer DriverService.IE_DRIVER_EXE_PROPERTY,
"c:\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver()
こんな感じ、これでIEの起動が完了する。
IEDriverServer.exe自体はseleniumと同じ場所からダウンロードできる。
32bit版と64bit版のDriverが存在するので、ロジック内で
System.getProperty("os.arch")
を実行し、戻り値によって、セットするDriverを変更させればいい感じだと思う。
今までどおり、DriverServer無しで起動したい場合は
DesiredCapabilities capability = DesiredCapabilities.internetExplorer();
capability.setCapability("useLegacyInternalServer",true);
WebDriver driver = new InternetExplorerDriver(capability);
でOK。
ただし、イベント発生概念の関係からオススメはしない。
実行速度って重要ですから、終いにはFireFoxDriverServerとか出るかもしれない。
DriverServer怖い。
変わっていることを確認する簡単なお仕事です。
さてさて、Chromeだけではなく、本バージョンから新たにIEにも
DriverServerが出現した。
Chromeの時は特に動作速度に問題がなかったためスルーした
(というよりも勝手にChromeDriverがDriverServerを使用する)が、
IEは遅いため、使用してもいいかもしれない、というより、
使用しないとエラーになる。
以下やり方
System.setProperty( InternetExplorer DriverService.IE_DRIVER_EXE_PROPERTY,
"c:\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver()
こんな感じ、これでIEの起動が完了する。
IEDriverServer.exe自体はseleniumと同じ場所からダウンロードできる。
32bit版と64bit版のDriverが存在するので、ロジック内で
System.getProperty("os.arch")
を実行し、戻り値によって、セットするDriverを変更させればいい感じだと思う。
今までどおり、DriverServer無しで起動したい場合は
DesiredCapabilities capability = DesiredCapabilities.internetExplorer();
capability.setCapability("useLegacyInternalServer",true);
WebDriver driver = new InternetExplorerDriver(capability);
でOK。
ただし、イベント発生概念の関係からオススメはしない。
実行速度って重要ですから、終いにはFireFoxDriverServerとか出るかもしれない。
DriverServer怖い。
登録:
投稿 (Atom)
