Archive for the 'インターネット' Category

SeleniumでXPath Locatorを使うとIEと相性悪そう

Selenium IDEとXPatherを使っているとついつい手軽にXPathが記述できるので、それを多用してテストを作成していたのですが、FireFoxで実行しているとサクサク動作してくれて、これはいいという感じなのが、IEで実行するとXPath Locatorが使われているところでやたらと遅くなります。CPU使用率もほとんど100%の状態になるし、ちゃんと確認していませんがどうもメモリーリークも発生しているようです。ひとつのブラウザセッションで連続してそういうコマンドを実行しているとどこかでおかしくなって、コマンドタイムアウト例外を投げて結果ファイルも残さずに異常終了してしまいます。
仕方がないので、いくつかにテストを分割してRCをテスト毎に起動することで回避しました。これってDOMに変更するしかないんですかね?
インターネット Firefox IE Selenium XPath

Seleniumでテスト作成するときの留意点

先日書いたTestRunnerだと少し遅くしてやらないとテストが通らない場合があると書いたのですが、そういう場合もあるにはあるのですが、少し注意しないといけない点に気付きました。
waitForNotElementPresent を使って何かが存在しないことをチェックしようとする場合に、チェックする対象が現在のページにも次のページにも存在しない場合、現在のページから次のページに切り替わったことを別なコマンドできちんと確認してからwaitForNotElementPresentで対象をチェックしてやらないと、現在のページでもTrueになってしまうので、不具合が生じる場合があります。って当たり前ですが、最初はちょっと気がつきにくかったりします。検証は基本的にassert*系かverify*系のコマンドで行うべきなのですが、ページの切り替えのついでにwaitFor*でとかやっているうちに上記のような状態に陥る可能性がありますので、やはりルールを決めてそれに従ってページ切り替え確認を行うようにした方がよさそうです。例えば、clickAndWaitでリンククリック後、必ずassertTitleかwaitForTitleをはさんでからverify*系で対象が存在することを検証するとか。
インターネット Internet Selenium

Selenium RCでTestRunnerのデフォルトの速度を設定する

Selenium RCを使ってテストを自動実行させるときに、ブラウザが自動的に起動してTestRunnerが実行されるのですが、この時、コントロールパネルにある速度調整のスライダーは、一番左にあって最速の設定になってしまいます。
これはバグだと思うのですが、Selenium IDEやCoreで実行するとすべて正常終了するのに、RCで実行するとwaitFor*コマンド等であるエレメントが認識されるまで待機するようにしてあげても、そのエレメントにアクセスした時点でそのエレメントが存在しないというようなエラーが発生する場合があります。この場合、TestRunnerの速度スライダーを手動で少し遅くしてあげれば、大抵の場合は、うまく通るようになるようです。それでも通らない場合は、本当にAjax等で何かを待たないといけない場合なので、waitFor*を入れてあげる必要があります。
で、毎回このスライダーを動かす手動操作が入るのは面倒なので、その速度を指定してやりたいのですが、どうも現時点では、RCのコマンドラインパラメータでは指定できないようです。リファレンスには、setSpeedというコマンドが使えるように書いてあるのですが、これを指定するとIDEでもRCでもエラーになってそこで止まってしまいます。さて、どうしようと思い、現時点では直接ソースをいじるしかないと思い、それでやっつけてしまったので、とりあえずメモしておきます。尚、これはSeleneseではなく、JavaやPerl等のプログラミング言語インターフェイスを介せば簡単にsetSpeed相当のコールが使えるはずです。
以下、手順です(jarコマンドを使うのでJDKが必要):
1. まず、selenium-server.jarファイルからcore/scripts/selenium-testrunner.jsというファイルを取り出します。
jar -xvf selenium-server.jar /core/scripts/selenium-testrunner.js
2. runIntervalという変数に値を代入している箇所を見つけます。このメモを書いている時点では、次の2箇所です。
2-1.
変更前:
var runInterval = 0;
変更後:
var runInterval = 100;
2-2.
変更前:
this.runInterval = 0;
変更後:
this.runInterval = 100;
この修正だけでも一応速度は落ちますが、スライダーの表示が左端にあるままなので、ちょっと気持ち悪いので、下記の場所を修正します(他にもオプションがあります。使用しているのはこちら)。
変更前:

objectExtend(HtmlTestRunnerControlPanel.prototype, {
initialize: function() {
this._acquireQueryString();
this.runInterval = 100;

this.speedController = new Control.Slider(’speedHandle’, ’speedTrack’, {
range: $R(0, 1000),
onSlide: fnBindAsEventListener(this.setRunInterval, this),
onChange: fnBindAsEventListener(this.setRunInterval, this)
});

this._parseQueryParameter();
},

変更後:

objectExtend(HtmlTestRunnerControlPanel.prototype, {
initialize: function() {
this._acquireQueryString();

this.runInterval = 100;

this.speedController = new Control.Slider(’speedHandle’, ’speedTrack’, {
range: $R(0, 1000),
sliderValue: 100,
onSlide: fnBindAsEventListener(this.setRunInterval, this),
onChange: fnBindAsEventListener(this.setRunInterval, this)
});

this._parseQueryParameter();
},

3. […]

Selenium と使うと便利なユーティリティ

またSeleniumの話ですが、前のエントリでも書いたとおり、TDDで使う分にはソース側を変えれば良いので特に問題にはならないのですが、既存のWebアプリに対してリグレッションテストを作成しようとすると今のバージョンでは、結構致命的になりかねない制限があります。
リファレンスに次のように書いてあります。
In some cases, Selenium will be unable to intercept a call to window.open (if the call occurs during or before the “onLoad” event, for example).
今私がテストを作成しているアプリケーションも結構古いもので、ページの切り替え時にJavascriptのAlertでポップアップウィンドウを出しているようなのですが、これのOKボタンを押すことが今のSeleniumだとどう転んでも出来ないのです。
でも、そこで手動操作を交えないといけないとなるとかなり魅力半減になってしまうのも事実で、少しの変更でバグが沢山出てしまうようなつくりの悪くなってしまったソースをリグレッションテストを通すために修正するというのも本末転倒のような話になってしまいかねません。
解決方法としては、Selenium RCを使用して.netプログラムにテストを変換して(テストの部分の変換はIDEがほぼ自動的にやってくれます)、Seleniumだけではどうしても手が出ない部分は、C#の力技で無理やり操作してしまうというのが一つの方法ですが、これだと開発者でない人にも何とかテストが作成できるというストーリーから離れていってしまうなあと考えあぐね、何か他の操作自動化するツールと組み合わせてできないかなと思って見つけたのがこれです。
UWSC
これもブラウザ操作等ができるのですが、その辺はSeleniumの方がずっと出来がよいと思いますが、SeleniumがJavascriptベースのために対応できない部分を補完するのには、結構最適な感じ(通常のWindowsプログラムなのでJavascriptの部分でかち合うことはない)です。私の場合、何とかこのユーティリティを組み合わせることで、Seleniumで閉じれなかったポップアップを閉じれるようになり、ほぼテストを自動化することに成功しました。このツールはオープンソースではありませんが、無償で提供してくださっているので大変ありがたいです。WindowsのAPIやCOM呼び出しもできるので頑張ればかなり強力なツールだと思います。ちょっと困った問題が、UIが全部日本語なんですよね。こちらの人にこれを使えとはちょっと言えないので、何か同等のツールを探さないといけないかも知れません。WinBatchなんかも使えるのかも知れませんが有料ですし、何かいいツールをご存知の方はぜひ教えてください。
とりあえず、Seleniumでのテスト自動化をしようとして、JavascriptのアラートウィンドウをSeleniumで閉じれなくて使用を断念しそうな方は、大いに試す価値があると思います。
インターネット コンピュータ Firefox Selenium UWSC

XPather 1.3

先日書いたSeleniumにちょっとはまっていくうちに、やっぱりXPathを正確に生成してくれるツールは必須アイテムで、このXPather 1.3が非常に良いというので使用中。確かによく出来ていて使いやすいです。Firefoxエクステンションです。
XPather 1.3
こうしてネット系の作業をやればやるほどなぜFirefoxがシェアを伸ばしてきたのかがよく理解できますね。どんどんエクステンションをインストールしていくとIEには戻れなくなって行きますね。IE7.0でこれに似た機能はあるんでしょうか? 私のデスクトップでは、一応IE7.0にアップグレードしたんですけど、何かタブをどんどん開いていくと、10個も開かないうちに大体どこか適当なところでクラッシュして不安定でちょっと使えないんですよね。Firefoxも1.5より2.0の方が不安定になった感じはありますけど、IE7ほどではないし、セッション回復機能もあるのでクラッシュしても再起動で、一応クラッシュした時の状態には戻してくれるので、IE7よりはずっとマシです。そんなわけで、私のノートブックX32の方は、IE6のままにしてあります。Windows UpdateでしつこくIE7.0にアップグレードするように催促されるのが面倒でしょうがないのですが、これって何とかならんのですかね。Windows UpdateのサービスがCPU使用率100%になってしまう現象もWindows2000マシンで遭遇していますし、どうもX32の方もその現象が出つつあるのですが、面倒くさくてまだ調べてません。そろそろ、LinuxかMac OS XとかUnix系のOSに切り替えようかと真剣に考えてしまうこの頃です。
インターネット コンピュータ Firefox Selenium

Selenium は使えそう

食べ物の話題ばかりだとちょっと知性を疑われかねないので、一応本職関連の話をたまには書きます。
先週、遅ればせながらSeleniumというWebサイトのテスト自動化ツールがあるのを知って、今仕事で移行作業中のサイトの動的コンテンツのRegression Test Suiteを作成してみました。
Selenium IDEというもののおかげで非常にテストケースを作成しやすくなっていることがわかり、オープンソースやっぱすごいなと感心した後、その作者は日本の方であることを知り、さらに感心。インターネットの進歩のおかげで国際的なコラボレーションの垣根は秒進分歩で低くなって行っていることを改めて実感しました。
で、大方、Firefoxで通るようになったテストケースをIEで実行してみると通らないのが一杯出てきて、調べてみると、VerifyTextPresentは特に、表組みを使ってレイアウトされている場合は、IEだと個別にしか認識できないようで、<td>タグに対応して1つのテストケースを作成する必要があるみたい。Firefoxだと行単位で1つのテキストとしてみなしてくれるのだが、これはどちらがいいとは言えないので、仕方ないところか。仕方ないので、表の一つ一つの要素単位で検証するようにテストケースのコマンドを分割して両ブラウザでOKとなった。
しかし、なぜか下記のようなxpath表記はIEだとfalseになってしまう場合があり、今のところ理由は不明。HTMLのできが悪いのかも知れませんが。
<tr>
<td>verifyElementPresent</td>
<td>//h1/IMG[@src=’images/image3.gif’]</td>
<td></td>
</tr>
それと、これは今のところ制限らしいが、target=_blankでオープンされたウィンドウはSelectWindowできない。テストドリブン開発では、テストを先に書いてから開発にかかるので、こういう制限は問題にならないのはわかるが、既に開発されたサイトに対して適用するテストを書こうとするとこの辺は結構引っかかってしまう感じがする。
それにしても、まだまだバージョン0.8台ですから将来が期待できそうなツールです。今のままでも、ちょっとしたテストならこれで十分いけそうな感じがします。
とりあえず3日程度はまって使ってみた感想でした。
インターネット コンピュータ Firefox Internet Selenium

Better Gmail

Better Gmail(Gmailを便利にするスクリプトを集めてくれたもの)というのがあるのを知って試してみました。結構便利ですね。
でも、ラベルの色付けがFirefoxのタブを一旦クローズしたりしないと変更が反映されなかったりで、今ひとつ動作が釈然としない部分がありますね。というか私がGreasemonkeyスクリプトの動きをきちんと理解していないのかも知れませんが。
でも、使い勝手が少しでも向上することは間違いないです。GMailを使っている人は使う価値ありと思います。
インターネット Gmail

InfoWorld Folds Print After 29 Years

InfoWorldもとうとう紙媒体から撤退でオンライン版にフォーカスするんだそうです。記事はこちら。
やっぱりニュースやトレンドが中心の雑誌は、ほとんどなくなってオンライン版になっていくのは時代の流れでしょう。
基本的に無料で入手できる情報で事足りてしまうので、わざわざお金を払って雑誌を講読する人はどんどん減少しているわけです。となるとどれだけ早くオンライン版で購読者をつかまえられるかという勝負にだいぶ前から勝負のポイントが変わっているわけで、それが理解できない出版社は淘汰されていくのでしょう。
これは新聞社にも同様のことが言えると思います。古い情報の蓄積をどう見せるかというあたりが差別化要因になっていくのだろうけど、単なる検索機能ならGoogle等で用は足りてしまうので、それだけではない何かが必要になるのではないかと思うこの頃である。
インターネット ビジネス Internet

SharpDevelop 2.1

昨日のエントリでSharpDevelopのv1.1の使用感を書いてv2.1を試しているところと書いた直後なのだが、デバッグ機能に「プロセスにアタッチ」がないということに気がついた。で、よく本家のサイトを読んでみるとasp.netは本気でサポートしていないということらしい(というか優先順位を下げているという感じだが)。「プロセスにアタッチ」も中間ぐらいの優先順位で作業中のようなのでいつかは入ると思うが、しばらくは難しそうですね。
なので、結局はDbgCLR.exe(.NET SDKに付属のデバッガ)を起動して、aspnet_wp.exe(ASP.NETのワーカプロセス)にアタッチしてやる方法でデバッグするか、cassiniという.NETを使って書かれた簡易サーバをかませてIIS直でなく間接的に(擬似的に)デバッグするという手を使うことになるようです。
clrdbg.exeもなかなかしっかりしたデバッガなのでそんなに文句はないのですが、SharpDevelopのデバッガも立派なものなので、IDEとしては統合環境内で閉じたデバッグができないのはASP.NET向けの開発環境としては、ちょっと魅力薄となってしまうのは否めない感じですね。
Tool->Optionからは、まだUIの言語に日本語の選択肢は入っていないようで(まだ、別途日本語版サイトから入れる形なのかな?)、日本語GUIはまだ試していません。でも、エディタはShift_JISを選択してちゃんと表示編集ができて、この辺はv1.1よりはぐっとよくなった感じ。でも、IMEの入力はあまりきちんと制御できていないようで、日本語を入力するときは少し違和感あり。これも何か回避策はあるのかも知れないけど、ソースに日本語を入力することは、とりあえずそんなに必要ないのでまた後日調べます。
と、とりあえず1日使ってみての感想でした。
インターネット コンピュータ

Marriott Hotel and Internet and Boingo

I’ve stayed at Marriott Hotel in San Ramon last week. Marriott is my favorite hotel and this was very comfortable bedding as others and this particular one is in the best location for me. It is adjacent to the small shopping center which has Whole Foods Market and Borders bookstore in walking distance (There are […]

Pages (4): « 1 2 [3] 4 »