読者です 読者をやめる 読者になる 読者になる

Selenium をコマンドライン起動して if文を使う

Selenium IDE で処理を分岐させたい時は以下のライブラリ/アドオンを使うといい。
・Flow Control
・goto_sel_ide.js
(http://code.google.com/p/o2platform/source/browse/trunk/O2_Scripts/APIs/Selenium/IDE_Extensions/goto_sel_ide.js?r=912)

ただ、どちらも FireFox を起動して Selenium IDE を使わないといけない。
今回はコマンドラインSelenium を起動させるので、
Selenium IDE のようにライブラリやアドオンは使えない。

ということで、JavaScriptで無理やり分岐させる。
元々SeleniumJavaScriptで動きを操作できるから、
無理やりではないけど・・・・。

今回はログイン後のURLによって処理を分岐させる。
以下はログインするテストケース。

<tr>
	<td>type</td>
	<td>id=loginID</td>
	<td>test_id</td>
</tr>
<tr>
	<td>type</td>
	<td>id=password</td>
	<td>test_password</td>
</tr>
<tr>
	<td>clickAndWait</td>
	<td>id=loginbtn</td>
	<td></td>
</tr>

上記テストケースでログインした先のURL によって処理を分けるには
以下のテストケースを続けて実行する。

<tr>
	<td>getEval</td>
	<td>win = this.page().getCurrentWindow();</td>
	<td></td>
</tr>
<tr>
	<td>getEval</td>
	<td>url = win.location.href;</td>
	<td></td>
</tr>
<tr>
	<td>storeEval</td>
	<td>javascript{
		if(url == 'http://test.co.jp/first_login.php'){
			win.location.href = 'http://test.co.jp/main';
		}
	}</td>
	<td>dumy</td>
</tr>

「getEval」でURLを取得し、「storeEval」でURLを判定し、
first_login.php であれば、 main に飛ばしている。
このようにテストケースを分岐させることができる。

--- 2013/07/12 追記 ---
これでは動かない場合がある。
原因はJavaScriptシンタックスエラー。
ただ、原因が分からない。「javascript{}」が悪いらしいが・・・。
ということで以下のように「storeEval」を使わないで「getEval」を使い、
変なシンタックスエラーが嫌なので、改行しない。
さらに win.location.href で飛ばすと、
飛ばし先が表示されないまま次のテストが開始されるから、
飛ばし先のページが表示されるまで pauseコマンドで sleep させる。
今回は5秒スリープさせる。

<tr>
	<td>getEval</td>
	<td>if(url == 'http://test.co.jp/first_login.php'){win.location.href = 'http://test.co.jp/main';}</td>
	<td>dumy</td>
</tr>
<tr>
	<td>pause</td>
	<td>5000</td>
	<td></td>
</tr>

これで上手くいきました。
--- 追記おわり ---

デバックは「storeEval」で alert() を使えばアラートが表示される。

<tr>
	<td>storeEval</td>
	<td>javascript{
		alert(url);
	}</td>
	<td>dumy</td>
</tr>

以上です。