と聞くと「おお!誰かがそんなフレームワークを書いたのか!?」と思われそうだが、そうではない。Watirのような完全なラッパー(Yoのラッパーじゃなくて、包むのほう)は自分が知る範囲では存在しない。というのはうそでこのブログを見直している間にそんなフレームワークを発見した。それは最後に述べるとして、IEはCOM経由で.NETから操ることができるのでWatirのようなフレームワークを作るのは時間がかかるかもしれないが、そんなに難しいことではないような気がする。(気がするだけ)前述のように.NETからIEをCOM経由で操ることができるのでPowerShellからもIEを操ることができるのだ。
$ie = New-Object -COM “InternetExplorer.Application”
をPowerShellで実行すると$ie変数の中にIEが格納される。それを使ってとりあえず何でも出来てしまうのだ。タスクマネジャーを見てみるとiexplorer.exeのプロセスが出現したのがわかる。では$ie変数に格納されたIEを少々操ってみることにしよう。
$ie.Navigate(“http://www.itmedia.co.jp“)
$ie.visible = $true
とするとIEが表れて指定したURLへ行ってくれる。
さらに・・・
$ie | gm
を実行すると$ieに格納されたIEオブジェクトのメンバを見ることができる。HTMLのそれぞれの要素への参照を得るには次のようにすると良い。
$txtNamae = $ie.document.getElementByID(“txtNamae”)
$txtNamae.value = “名無しのごんべい”
そうするとテキストフィールドに「名無しのごんべい」という値が入る。
このようにDOMを直接歩いて取り合えず何でも出来てしまいそうだ。ただ前述のとおりフレームワーク化されていないので、PowerShellを使ってすべて自分でUI用のユニットテストを作ろうとするとかなりガシガシ書かなければいけない部分って多そうである。
そういえばPowerShellチームブログで過去に「ユニットテストのPowerShell用のフレームワークって必要だと思う?」と一般の人々に聞いていたのを思い出す。あれってどうなったんだろう?ググってみるとこんなのもある。面白そう。あれれ?さらにさらに.NET用のWatirでWatiN(ワットイン)というのを発見。これだったらPowerShellで読み込んで出来そう。一番最近の更新が2月12日だから結構最近だ。試してみる価値あるかも。試してみたらまたこのブログで紹介します。
コメント
上記サンプルはCOMですね。
てっきり、WMIを使わないと上記のサンプルは実装できないのかと思いこんでました。
ところで、DCOMやCOM+を参照する操作もこの応用でできるんでしょうか?
PowerShellを使って、DCOM、COM+経由でリモート接続!
なんてできればいいなと素人考えを持っています。
その辺りの実践的なサンプルがあると嬉しいです。