PowerShellからWatiNを使う(V2編)

by 入海 26. 2月 2009 03:07

この間PowerShellからWatiNを使おうとして一番問題になったのがWatiNをPowerShell上でSTAモードで実行しなければならなかったことだ。前回の記事でも紹介したようにV1のPowerShellではSTAにするにはC#のカスタムコマンドレットをコンパイルしてそれの助けを得て初めてWatiNをSTA(シングルスレッドアパートメント)モードで実行できたのだが、なんとV2を使うとPowerShellを簡単にSTAモードでスタート出来てしまうことを発見。これがあればこの間苦労したことなんて一気に解決だ。

コンソール上でpowershell /?と打ってやるとpowershell.exeの起動時のオプションが表示される。その中に・・・

-Sta
    Start the shell using a single-threaded apartment.

PowerShellを起動するショートカットのプロパティのターゲットに-Staを追加して更新し、ショートカットをダブルクリックするとPowerShellがSTAモードで起動してくれるのだ。あとはWatiNスクリプトが入ったファイルを普通に実行すると見事に成功。今までの苦労はなんだったんだろう・・・

というわけでWatiN+PowerShellがかなり現実味を帯びてきた。これからもっとWatiN用のPowerShellスクリプトを書いていきたいと思っている。

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

PowerShell

INETA & techbank.jp & PowerShell from Japan & HIRO's.NET 合同勉強会 in 仙台 バナー設置のお願い

by けろ-みお 20. 2月 2009 12:54

 

先日お知らせした、

「INETA & techbank.jp & PowerShell from Japan & HIRO's.NET 合同勉強会 in 仙台」

の宣伝用バナーを作成しました。

申込開始から3日経ちますが、場所が仙台ということもあり、申込数が振るわない状態です。

(7名の申込みがありましたが、6名がスタッフという状況なので、実質、1名の方しかお申し込みがない状態です)

 

参加する方はもちろんのこと、このBlogを購読されている方や、参加されない方におかれましても、

ご自身が所有しているBlogやHPに下記のバナーを設置頂けないかと思います。

(お好きなバナーをお選び下さい。)

 

オフラインイベントに興味がない、参加しないから関係ないと思われる方も、

バナー設置にご協力頂けないかと思います。

コミュニティ活性化のため、皆様のお力添えの程、宜しくお願いします。

 

640 × 480版

640×480 版の設置HTML

<a href="http://techbank.jp/event-sendai/">
<img 
src="http://techbank.jp/images/event-sendai-banner2.png" 
border="0" 
alt="INETA & techbank.jp & PowerShell from Japan!! & HIRO's.NET 合同勉強会 in 仙台" 
width="640" 
height="480" />
</a>

 

600 × 30 版

600 × 30版の設置HTML

<a href="http://techbank.jp/event-sendai/">
<img src="http://techbank.jp/images/event-sendai-banner3.png" 
border="0" 
alt="INETA & techbank.jp & PowerShell from Japan!! & HIRO's.NET 合同勉強会 in 仙台">
</a>

 

INETA版バナー(120×120)

INETA版バナー(120×120) 設置HTML

<a href="http://techbank.jp/event-sendai/" target="_blank">
<img src="http://techbank.jp/event-sendai/InetaStudyLogo5.jpg" 
border="0" 
style="border-width:1pt;border-color:#eeeeee;border-style:outset;" 
alt="INETA & techbank.jp & PowerShell from Japan!! & HIRO's.NET 合同勉強会 in 仙台" />
</a>

 

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

お知らせ | その他

テキストファイルに含まれている文字列を検索

by 入海 20. 2月 2009 09:31

ずっと前にPowerShellでテキストファイルに含まれる文字列を検索して検索する文字があったらそれを画面上に表示するというのを紹介したことがあったが、もうちょっと踏み込んで条件に合ったファイルを一つのディレクトリにコピーするところまでやってみよう。

dir -filter *.sql -recurse | where {[System.IO.File]::ReadAllText($_.FullName) `
-match "DataStatus"} | foreach {$_.CopyTo("D:\Temp\$_")}

上の例では拡張子がsqlのファイルを最初にリストしてDataStatusという文字列が含まれるとD:\Tempにそれぞれのファイルをコピーするというもの。必要に駆られたのでメモ程度に紹介しておきます。

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

PowerShellからWatiNを使う

by 入海 20. 2月 2009 07:11

PowerShellからウェブアプリテスト用のフレームワークWatiNを読み込んでウェブアプリのテストプログラムを書こうとしているのだが、これが一筋縄ではいかない。二重、三重の問題が立ちはだかる。

まずはWatiNをダウンロードしてWatiN.Core.dllをPowerShellに読み込む。そしてIEを立ち上げてURLに行くという単純な作業をしたいと思い、まずは下のようなコードを書いてみた。ちなみにこのスクリプトはTest.ps1というファイルに保存し、アセンブリが入っているbinフォルダに入れてある。

[System.Reflection.Assembly]::LoadFile((Join-Path (Get-Location) "\WatiN.Core.dll"))
$ie = New-Object WatiN.Core.IE
$ie.GoTo(http://www.devslife.com)

 

すると次のようなエラーが出る。

New-Object : Exception calling ".ctor" with "0" argument(s): "Could not load file or assembly 'Interop.SHDocVw, Version
=1.1.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified."
At D:\Scripts\WatiN\bin\Test.ps1:2 char:17
+ $ie = New-Object <<<<  WatiN.Core.IE
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

 

なるほど。PowerShell.exeが入っているフォルダ内(C:\Windows\System32\WindowsPowerShell\v1.0)にInteropアセンブリが入っていないからなのだ。Interop.SHDocVw.dllをPowerShell.exeと同じフォルダ内にコピーするか、再コンパイルをして厳密名をアセンブリにつけるかだがとりあえずPowerShell.exeと同じフォルダにInteropアセンブリをコピーすることにする。PowerShellコンソールを再起動して再びスクリプトを実行すると・・・

今度は下のようなエラーが・・・

New-Object : Exception calling ".ctor" with "0" argument(s): "The CurrentThread needs to have it's ApartmentState set t
o ApartmentState.STA to be able to automate Internet Explorer."
At D:\Scripts\WatiN\bin\Test.ps1:2 char:17
+ $ie = New-Object <<<<  WatiN.Core.IE
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

て、手ごわすぎるぞ。でも上のエラーは完全にWatiNから意図的に投げ出されたものなのでちょっと希望の光が見えてきた。エラーによるとIEの自動化を行うにはスレッドがApartmentState.STAにセットされていなければいけないと。つまりPowerShellをApartment.STAにセットしなければいけないのか。そこでググってみるとPowerShellチームブログに到着。なんとカスタムアセンブリをこしらえてそれによってSTAにセットせよと。おっしゃあ、こうなったら意地でやってやる。

まずはPowerShellチームブログにあったカスタムCmdletをコンパイルしてそれをインストール。インストールの仕方はこのブログで一度紹介しているので参考にしていただきたい。インストールするとInvoke-Apartmentというコマンドレットが利用可能になる。それを使用してTest.ps1ファイル内のPowerShellスクリプトを実行するのだ。

Invoke-Apartment "STA" ([System.IO.File]::ReadAllText("Test.ps1"))

これを実行したらちゃんとIEが立ち上がってURLに行くことができたのだ。これでPowerShellからWatiNを使うことができる。

これは蛇足なのだが、上のコマンドでテキストファイルを読みだしているだけなのにどうしてGet-Contentコマンドを使わなかったというとGet-Contentが行ごとのObject配列を返してくるのでInvoke-Apartmentの二つ目のパラメータのString型と合わないために上のようにした。

あー苦労した。上のことを踏まえてなんとかもっと簡単にWatiNをPowerShellから使えるようにできないものだろうか。

これってどうしてもPowerShellでウェブアプリテストしたいという人には役立ちそうなので英語でも書いてみることにする。

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

INETA & techbank.jp & PowerShell from Japan & HIRO's.NET 合同勉強会 in 仙台 申込開始!

by けろ-みお 18. 2月 2009 11:00

お待たせ致しました! 来る2009/03/28(土)に、宮城県仙台市において、

「コミュニティ勉強会に参加しよう~仙台編 3/28開催 [参加無料]

 INETA & techbank.jp & PowerShell from Japan & HIRO's.NET 合同勉強会」

 

を開催することが決定しましたので、お知らせ致します。

 

今回は、PowerShell中心にセッションを展開しますので、ご都合のつく方は、是非、ご参加頂きたく存じます。

開催概要の詳細と参加申込については、

http://techbank.jp/event-sendai/

にアクセスを!!!!!

 

今回の目玉は、この「PowerShell from Japan!!」にもご協力頂いている

MS田辺さんのPowerShellセッションと、「PowerShell from Japan!!」の管理人HIROさんの

セッションかなと思いますので、 たくさんの方にいらして頂きたく存じます。

 

東北地方でこのようなイベントを開催した事例も少ないと思いますので、東北地方にお住いの方には、

是非、いらして頂きたいと思います。

 

なお、東京からのアクセスだと、秋田新幹線「こまち」の指定された新幹線に乗車すると、

25%OFFで仙台まで行くことができます!

通常、東京からだと、新幹線で、11,000円、JR常磐線で、9000円ぐらい片道でかかりますが、

頑張れば、8300円程度で、仙台に行くことができますので、ぜひ、いらしてください。

http://jreast.eki-net.com/tokudane/pdf/bullet/akita_tky0903.pdf

所要時間も、1時間30分~2時間強ぐらいです!たくさんのご応募、お待ちしております。

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

お知らせ

Calendar

<<  3月 2010  >>
月曜火曜水曜木曜金曜土曜日曜
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2010 PowerShell from Japan!!