Seleniumで外部サーバに対してテストを実行する方法 (4/11大幅改訂)

フォーラムで開発チームの方が言ってることによると外部サイトを扱えるようにする手段は4つあるようです。
(1)ブラウザの「same origin policy(同一生成元ポリシー?)」をオフにする。
(2)HTA(HyperText Application)を使う。
(3)CGIProxyのようなreverse proxy serverを使う。
(4)squirmのようなproxy server with a redirectorを使う。


(1)はやり方がよくわからんし、マシン(設定)に依存しちゃう。(3)(4)は指定するURLにプロキシとかを含めたりしなきゃいけなっぽい。


ということで(2)が現実的そうなので試してみたところ、一応できました。課題点などは後述。


(手順)
1.SeleniumのzipをDL→を解凍してできたseleniumフォルダの配下に、作成したテストケース(とTestSuit)のフォルダを置く。
  (※テストケースのURL記述は絶対パスに変更しておく)
2.TestRunner.htaを編集。58行目のTestSuitを指定している箇所を変更。

        <td width="25%" height="30%" rowspan="2"><iframe name="testSuiteFrame" id="testSuiteFrame" 
        src="./testhtml-it/01_Login_Test/01_Login_TestSuit.html"></iframe></td>
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              手順1で配置したフォルダのTestSuitを指定

3.TestRunner.htaをダブルクリックとかで実行。テストランナーが立ち上がる。
4.テストランナーでテスト実行。


テストケースはこんな感じ。

<tr>
    <td>open</td>
    <td>http://192.168.0.99/SyosekikunWeb/001_login.jsp</td>
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
             リモートサーバ上のアプリを開く
    <td></td>
</tr>
<tr>
    <td>assertTitle</td>
    <td>書籍君 ?ログイン?</td>
    <td></td>
</tr>
<tr>
    <td>assertAttribute</td>
    <td>xpath=//a@href</td>
    <td>exact:http://192.168.0.99/SyosekikunWeb/026_guide.jsp</td>
</tr>
<tr>
    <td>clickAndWait</td>
    <td>submit</td>
    <td></td>
</tr>


当然、Googleとかも開いて制御できます。

<tr>
    <td>open</td>
    <td>http://www.google.com</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td>verifyTitle</td>
    <td>Google</td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td>type</td>
    <td>q</td>
    <td>Selenium ThoughtWorks</td>
</tr>


いくつかポイント。
seleniumフォルダはローカルPC上のどこに置いてもOK。フォルダ名も任意でOK。
・user-extensions.jsは今までどおり使える。
HTAファイルのファイル名は任意でOK。TestSuit毎に複数作ればよいと思われる。


(..ということは、、この方法を標準にした方がよいかも??)



現状見えてる問題点、というか課題。
・TestSuitが複数ある場合の対応。(→上述の通り、HTAを複数作るのが一番楽そう。)
・テストケースの記述がIPアドレス(絶対パスURL)固定になっちゃう。
 (テストマシンが固定されてるなら問題なし?)
・テストでDBをいじくりまわす場合、初期化処理が必要。
 (初期化の仕組みだけ別個に作ってアプリと同じサーバにデプロイ、かなぁ。。?)
・外部リンク(_blank指定)を開くと止まる。(後述)



上述の件。_blank指定の外部リンクをクリックした場合は、制御が移せないので止まってしまう。

(画面のソース)
    <!--ここは書籍のISBNを元にアマゾンから画像を持ってくる-->
    <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873110386/" target="_blank">
    <img src="http://images-jp.amazon.com/images/P/4873110386.09.MZZZZZZZ.jpg" border="0"></a>

このリンクに対してクリックした場合、別ウィンドウは開くけど、Seleniumは止まる。
(テストケースのコード)
<tr>
	<td>clickAndWait</td>
	<td>//a[@href='http://www.amazon.co.jp/exec/obidos/ASIN/4873110386/']</td>
	<td></td>
</tr>