Archive for the '技術' Category
Thursday, July 12th, 2007
久々にsysinternals.comへ行ってみたらいきなりマイクロソフトのページへ飛んだのでびっくり。いつの間にか買収されてたんですね。
http://www.microsoft.com/technet/sysinternals/
まあ、マイクロソフトにしてみれば、内部情報なしに自分達よりもすぐれたユーティリティをばんばん出されたんじゃ、こりゃかなわんから買ってしまおうということになったんでしょうね。sysinternalsの人達(確か数人で数億以上の売上があった超高効率の会社だったはず)にしてみれば、ここらが潮時だったんでしょうか。内部資料へのアクセスができれば、更に磨きがかかるんでしょう。まあ、いずれにしてもこの買収は自然の成り行きというか、特に驚きはないんですけど、何で今頃(去年のようですが)という感じはします。
PSToolsなんかもまだダウンロードできますし、ずい分とカバー範囲が広がっているようです。だけど、無料ではなく販売していたツールが見当たらんですね。この辺は販売中止にさせられたんでしょうか、それともTechNetかなんかに入っているんでしょうかね。 その辺が本当の買収理由なんでしょうか。暇な時に探してみます。製品の名前を忘れてしまったのですぐにググれない。旧サイトはなくなっているし。
Leave Comment » | Posted in コンピュータ, ビジネス, 技術
Tags: microsoft, pstools, sysinternals, technet, コンピュータ, ビジネス
Thursday, June 28th, 2007
SeleniumでSelenium RCを使ってプログラミング言語からテスト実行をドライブすれば、条件分岐やら繰り返し等は簡単に実現できるのは、当たり前なのですが、やはりテスターがプログラミング言語に馴染んでいる人でない場合に、Seleneseの範囲内で収めたいけど、どうしても条件分岐や繰り返し処理等を行いたいときは、ユーザ拡張 flowControl が使えます。
http://wiki.openqa.org/display/SEL/flowControl
上記のリンク先にコメントがあって、そこに色々と注意事項が書いてあるのですが、ちょっとわかりにくいので下記にまとめておきます。
まずは、Selenium IDEで使用する場合、SeleniumのPlay(日本語では実行と訳されている?私は英語インタフェースのまま使っているので間違っていたらすいません)ボタンでは使用できません。Play with Selenium TestRunner(TestRunnerで実行)ボタンなら使用できます。Selenium Coreでは普通に使えます。
それから、Selenium IDEで上記の制限を知った上で使いたい場合に、オプション設定で下記のファイルを読込むようにしてあげる必要があります。順番は下記の通りでないとエラーになります。
selenium-api.js
selenium-executionloop.js
selenium-testrunner.js
goto_sel08.js
Selenium Coreでは、単にgoto_sel08.jsの内容をuser-extensions.jsにコピペするだけで他のファイルは既にCoreでロードされているので大丈夫です。
この辺は、フォーラムの下記のスレッドも参考になりました。
http://forums.openqa.org/message.jspa?messageID=19612#19612
Leave Comment » | Posted in インターネット, 技術
Tags: flowControl, Selenium, user-extension, インターネット
Thursday, June 14th, 2007
Seleniumを既存のWebサイトのテストへ適用しようとする場合に厄介なことの一つが、target=_blankでブラウザの別ウィンドウを開いてしまうようなリンクをテストしようとする場合があります。現バージョンでは、JavaScriptのOpenコマンドで指定するWindowIDがないとselectWindowコマンドが効かないため、新しく開かれたウィンドウを操作することができません。で、それの回避策として、target=_blankをやめてJavaScriptのopen()コマンドを使うように書き換えるという手が使えない場合の対処方法がOpenQAのフォーラム内の下記のスレッドにありました。
target=_blankのLinkへの対処方法
要は、JavaScriptを使って、現在のドキュメント内のtarget=_blankをtarget=’popup’みたいなウィンドウ名(タイトルではなくWindowID)で開くように動的に書き換えてあげてそれをやはりJavaScriptで新しいウィンドウをそのウィンドウ名で開いてから、目的のリンクをクリックすれば、そのウィンドウ内に開かれるので、先に付けた名前でそのウィンドウが選択可能になるというアイデアです。
SeleniumのHTML形式だと、概ね下記の手順がウィンドウを開いて目的のテストを実行してからウィンドウを閉じるという一連の処理となります。
storeEval javascript{“this.page().findElement(‘link=link on current page’).target=’popup’”} dummy
storeEval javascript{“selenium.browserbot.getCurrentWindow().open(”, ‘popup’)”} dummy
click link=link on current page
selectWindow popup
WaitorTitle title of popup page
<<– ここに一連のテストが入る –>>
storeEval javascript{“this.browserbot.getCurrentWindow().close()”} dummy
storeEvalコマンドで指定している変数dummyはダミーの変数で後のコマンドでは使用しません。フォーラムのスレッドの途中で誰かが指摘しているようにウィンドウを閉じるのにはcloseコマンドだとちゃんと動かないことがあるようなので、上記のようにこれもJavaScriptのClose()を呼んでいます。
色々と試してみたのですがリンク先がスタティックなWebページだとこれでうまく動作するようですが、リンク先が更に動的コンテンツだったり、PDFを開いている場合にはうまく行きませんでした(先に開いた空白のウィンドウを無視してやはり別ウィンドウが開かれてしまう)。これは多分ブラウザがそのように処理しているのだと思うのですが、この辺にもtarget=_blankがなかなかなくせない理由の一つなのかも知れません。この辺の動きはIEでもFireFoxでもほぼ同じでした。
確か、selectWindowコマンドでタイトル名を指定しても動作するように次のバージョンではなるようなことも書いてあったので、それも試してみようと思いますが、一応上記回避策も使える場合はありがたいので、この問題に直面した方は試してみてください。
Leave Comment » | Posted in インターネット, コンピュータ, 技術
Tags: Firefox, IE, Internet, JavaScript, Selenium, インターネット, コンピュータ
Tuesday, June 12th, 2007
今日は、ちょっとしたことを調べていて、CDOオブジェクトを使ってスクリプトでメール送信するやり方ではまってしまい少し時間を無駄に使ったので、忘れないうちにメモ。
調べたかったのは、CDOでメール送信する際にエンコーディングにiso-2022-jpを指定すると半角カナを全角カナに自動変換するんだったっけという疑問への回答。確か、そうだったはずと思ったんだけど、ググってもはっきり書いてあるサイトがMicrosoftを含めて見つからない。じゃあ、ちょっとスクリプトを書いて試せばはっきりするじゃんと、スクリプトのサンプルぐらいならググってどこかから引っ張ってきてやれば10分ぐらいで試せると思い手を付けたところでドツボにはまる。
大体がそんなに例が豊富ではない。CDOはドキュメント類がやけに少ないので有名なのは知っていたが、こんなにないとは思いもせず、何とか少ないサンプルをつなげたりしながら形になったところで、どうしても1行だけうまくランタイムエラーが取れない。試した環境がXPと2000 Serverだったのだが、両方とも英語版のせいなのか、CDO.TextBodyPartが存在しないと怒られてしまう。Microsoftのリファレンスを見ても動作するはずなのに、何も手がかりはなし。試行錯誤を重ねた上、CDO.BodyPart.Charsetにiso-2022-jpを設定してやることで一応メールは送信できるようになった。でも、なんでこんなことになってしまったのかは、なぞ。どなたか知っている人がいたら教えてください。
ちなみに動作確認に使ったスクリプトはJavaScriptで書いたもので下記のようなもの。適当な名前(例えばjsmail.js等)で保存してcscript jsmail.jsとコマンドライン実行してやるだけのものです。
var CDO = new ActiveXObject( “CDO.Message” );
var f = CDO.Configuration.Fields;
var s = “http://schemas.microsoft.com/cdo/configuration/”;
f.Item( s + “sendusing” ) = 2;
f.Item( s + “languagecode” ) = “iso-2022-jp”;
f.Item( s + “smtpserver” ) = “smtp.gmail.com“;
f.Item( s + “smtpauthenticate” ) = 1;
f.Item( s + “sendusername” ) = “username@gmail.com“;
f.Item( s + “sendpassword” ) = “password”;
f.Item( s + “smtpserverport” [...]
Leave Comment » | Posted in インターネット, コンピュータ, 技術
Tags: CDO, Internet, JavaScript, インターネット, コンピュータ
Wednesday, June 6th, 2007
Firefoxを2つオープンしていて片方に沢山のタブを開いていて、もう片方にはひとつのタブしかない状態で、沢山のタブの方を先に閉じてしまい、最後にひとつのタブしか開いていなかった方を閉じてしまうと最後の状態がひとつのタブになってしまい、せっかくオプションで最後に使用していたタブを表示するように設定していても、ほぼすべて失われてしまうことに今頃気付いて(それをやってしまった)、んーっ、これは不便、大体セッション状態を複数覚えさせることができればいいだけのことじゃないの、それぐらいならエクステンションに何か便利そうなのがあるだろうと思って検索したら、ありました、すごいいいのが。
Session Manager
他にもあるかも知れませんが、私はこれが一発で気に入りましたので、他は見ていません。複数セッション保存はもちろんできるし、細かな動作設定ができるので今のところジャストフィットという感じで、ありがたい限りです。私のようにこんな基本的なことに気付いていない方がいましたら、必需品ですので、ぜひお試しあれ。
Leave Comment » | Posted in インターネット, コンピュータ, 技術
Tags: Firefox, Internet, インターネット, エクステンション
Friday, June 1st, 2007
昨日のエントリと同じ話題ですが、こちらはFireFoxの場合。テスト対象のURLがIISでホストされていて、NTLM認証を使用している場合、Selenium RCのJava Server(Proxy)で単にFireFoxを立ち上げてしまうとPromptというタイトルでユーザ名とパスワードの入力を求める認証ダイアログが出てしまいます。これは、SeleniumではJavaScriptを使用しているため、自動入力できませんし、先日紹介したUWSC等の他のツールを使っても簡単にはできなさそうです(これはもう少し根性入れれば可能かも知れませんが、単にWindows APIをたたくぐらいではどうもうまく行かないようです)。IEの場合は、先日のバグ修正を入れてやればIE自体が自動的にNTLM認証に対応してくれているので、OKだったのですが、FireFoxでは、それだけではこのPromptダイアログが出てしまい、うまく行きません。Seleniumサイドからいくら調べても解決策が見当たらず、諦めかけていたところで、はたと気が付きました。これは、Selenium特有ではなくて、FireFoxでIIS等Microsoft技術を組み合わせようとすると必ずぶち当たる問題のはずなので、Selenium抜きで、単にNTLM認証とFireFoxについて調べればいいのかと。そうしたら、あっさり見つかりました(笑)。
私の場合は、下記のBlogが最初のヒントでした。
http://www.crossedconnections.org/w/?p=89
要は、Firefoxのアドレスバーにabout:configと打ち込んで、network.automatic-ntlm-auth.trusted-urisというエントリを見つけて、そこにテスト対象のURIを入れてあげればいいわけです。
で、これをSelenium RCに応用するには、大体以下の要領で行けばいいわけです。
SeleniumのJava Serverで使用するデフォルトのFirefoxプロファイルを何らかの形で手に入れる(私の場合はビルド環境から入手)。
上記で得たプロファイルのフォルダにprefs.jsというファイルをコピーしてくるか、空のファイルで作成します。
prefs.jsの中に下記の行を追加します。http://hostnameの部分に対象となるURIを入力します。手で編集するのに自信がない場合や、この辺の詳細については、本家のhttp://kb.mozillazine.org/Editing_configurationを参照してください。
user_pref(“network.automatic-ntlm-auth.trusted-uris”, “http://hostname”);
このプロファイルを適当なフォルダに置き、Selenium Serverの起動オプション -firefoxProfileTemplate に指定してあげます。
この要領で、私の場合はユーザ認証のダイアログが消せました。同様の現象にはまってしまった場合は、ぜひ試してください。
Leave Comment » | Posted in インターネット, コンピュータ, 技術
Tags: Firefox, Internet, java_server, ntlm, proxy, Selenium, UWSC, インターネット, コンピュータ
Thursday, May 31st, 2007
先日、Selenium Remote ControlのJava Serverのビルド方法のメモを書いたのですが、なんでビルドしないといけなかったかというと、テスト対象のアプリがIISでホストされていて、NTLM認証を使っていたのですが、ProxyであるSelenium RCのJava Serverを通す場合に、どうもその認証が正しく処理されないために、アクセス権がないと言われてテスト対象のサーバにアクセスできないという現象に当たってしまったのがきっかけでした。
で、フォーラムを調べていたら下記のバグ修正が見つかりました。
http://jira.openqa.org/browse/SRC-252
この修正を入れると、一度普通にIEで対象サイトにアクセスしておけば認証されたセッションの情報が記録されるので、Selenium RCから起動されたIEフレームでも問題なくアクセスできるようになりました。似たような現象に遭遇した場合は、試す価値ありと思います。
1 Comment » | Posted in インターネット, コンピュータ, 技術
Tags: IE, Internet, java_server, jira, ntlm, proxy, remote_control, Selenium, インターネット, コンピュータ
Tuesday, May 29th, 2007
Selenium Remote Controlを使っていて、どうしてもサーバーを修正する必要があってビルドしないといけなくなったのでその時のメモ。
1. ビルドに必要なもの: JDK, Ant, Maven (私が使用したのはJDK 1.5.0 Update11, Ant 1.7.0, Maven 2.0.6です)
2. ビルド方法は、http://www.openqa.org/selenium-rc/building.htmlに書いてあったのですが、ちょっと説明が古いようでどうもうまく行かない。
で、以下が私がやってうまくビルドが通った手順:
A. subversion (私は1.4.3を使用)をインストールして以下のコマンドをコマンドラインで実行。
svn co https://svn.openqa.org/svn/selenium-rc/trunk
B. 最新のソースツリーができるので、trunkディレクトリへ移動し、以下のコマンドを適宜実行します(pom.xml の中の<phase> タグで定義されている部分を検索して取得):
mvn -Dnotest compile
mvn -Dnotest package
他に、mvn testやmvn installがありますが私はjarファイルが欲しかっただけなので、packageまでで十分でした。
それと、フォーラムには、テストをスキップするには、-Dmaven.test.skip を指定しろと書いてある部分があるのですが、少なくともこの記事を書いている時点では、何の効果もありませんでした。
C. Operaをインストールしていない環境の場合は、testOpera がOpera ブラウザがないと言って失敗します。この場合は下記を実行。(http://forums.openqa.org/thread.jspa?messageID=22833が元記事)
以下のファイル内のtestOpera()の定義部分をすべてコメントアウトします。
server-coreless\src\test\java\org\openqa\selenium\server\WindowsHTMLRunnerMultiWindowTest.java(25): public void testOpera() throws Exception {
server-coreless\src\test\java\org\openqa\selenium\server\WindowsHTMLRunnerTest.java(17): public void testOpera() throws Exception {
とりあえず、ここまでです。
Leave Comment » | Posted in インターネット, コンピュータ, 技術
Tags: Internet, Selenium, インターネット, コンピュータ
Thursday, May 24th, 2007
Selenium IDEとXPatherを使っているとついつい手軽にXPathが記述できるので、それを多用してテストを作成していたのですが、FireFoxで実行しているとサクサク動作してくれて、これはいいという感じなのが、IEで実行するとXPath Locatorが使われているところでやたらと遅くなります。CPU使用率もほとんど100%の状態になるし、ちゃんと確認していませんがどうもメモリーリークも発生しているようです。ひとつのブラウザセッションで連続してそういうコマンドを実行しているとどこかでおかしくなって、コマンドタイムアウト例外を投げて結果ファイルも残さずに異常終了してしまいます。
仕方がないので、いくつかにテストを分割してRCをテスト毎に起動することで回避しました。これってDOMに変更するしかないんですかね?
Leave Comment » | Posted in インターネット, 技術
Tags: Firefox, IE, Selenium, XPath, インターネット
Thursday, May 24th, 2007
先日書いたTestRunnerだと少し遅くしてやらないとテストが通らない場合があると書いたのですが、そういう場合もあるにはあるのですが、少し注意しないといけない点に気付きました。
waitForNotElementPresent を使って何かが存在しないことをチェックしようとする場合に、チェックする対象が現在のページにも次のページにも存在しない場合、現在のページから次のページに切り替わったことを別なコマンドできちんと確認してからwaitForNotElementPresentで対象をチェックしてやらないと、現在のページでもTrueになってしまうので、不具合が生じる場合があります。って当たり前ですが、最初はちょっと気がつきにくかったりします。検証は基本的にassert*系かverify*系のコマンドで行うべきなのですが、ページの切り替えのついでにwaitFor*でとかやっているうちに上記のような状態に陥る可能性がありますので、やはりルールを決めてそれに従ってページ切り替え確認を行うようにした方がよさそうです。例えば、clickAndWaitでリンククリック後、必ずassertTitleかwaitForTitleをはさんでからverify*系で対象が存在することを検証するとか。
Leave Comment » | Posted in インターネット, コンピュータ, 技術
Tags: Internet, Selenium, インターネット
Pages (4): « 1 2 [3] 4 »