Seleniumを使っての回帰テスト

kossyselenium,ツール,回帰テスト

こんにちは。
先日、会社から神宮の花火が見られて、千駄ヶ谷もいいなと思ったおおこしです。

品質管理チームでは手動での回帰テストと合わせて、Seleniumでの回帰テストを行っています。
もちろんSeleniumでは網羅はできませんが、広い範囲が自動実行できるのはとても便利です。
Seleniumは同じ操作をさせるのには便利ですが、単に操作を記憶させただけでは実行するたびにIDが変わる箇所ではつまずいてしまいます。
そこで、取得したID(文字列)を選択項目や入力項目に使って回帰テストを拡張したい!と思い調べました。

今回はJavaScriptを使って、指定したID(文字列)をブラウザから取得し、選択値として呼び出す方法について書きます。

選択したいのは、下のプルダウンメニューです。

<option value="222">222:テキスト2</option>
value値・labelが固定ではないため、”value=222″や"label=222:テキスト2″と指定してしまうと、次回は失敗してしまいます。
何回も実行できるよう、”value=取得したID″に設定します。

項目ID 種類 名称
項目リスト一覧
111 テキスト テキスト1
222 テキスト テキスト2
333 テキスト テキスト3

取得したいIDは、上記テーブルの名称"テキスト2″の項目IDです。
項目IDはSeleniumを実行するたびに数値が変わります。
<td>にid指定がある場合はJavaScriptで一度に取得できますが、今回のパターンでは<td>にid指定がなく、<table>のみ に id 指定があるので関数を作成して使います。

Seleniumを実行するたびに取得したい項目IDの数値は変わりますが、表示されている位置は変わらないケースなので、行と列を指定して項目IDを取得します。

まずSeleniumがデフォルトで読み込む、user-extensions.jsファイルを作成します。
ブラウザのテーブルから文字列を取得する関数をuser-extensions.jsファイルに書きます。

// 特定のテーブル(table_id)から指定行(rows_number)・指定列(id_column)の
// 文字列(id)を取得する

function GetIdFromTable( table_id, rows_number, id_column) {
    var win = selenium.page().getCurrentWindow();
    var tmp_table = win.document.getElementById(table_id);
    var tmp_tr = tmp_table .getElementsByTagName('tr')[rows_number];
    var id = tmp_tr.getElementsByTagName('td')[id_column].firstChild.nodeValue;

    return id;
}

Selenium RCではsetting.propertiesファイルにuser-extensions.jsファイルのパスを設定します。
Selenium IDEでは[オプション]から[設定]を選択すると設定画面が開くので、一般タブのuser-extensions.jsファイルのパスを設定します。

ここからはSeleniumの実行です。
storeEvalコマンドを使って指定したJavaScriptを実行し、結果(element_id)を取得します。

storeEval | GetIdFromTable('elements', 3, 1 ) | element_id

変数element_idに項目IDが格納された状態です。

次に、セレクトリストから取得した項目IDを使って選択します。
selectコマンドでstoredVarsを使って格納された変数(element_id)にアクセスします。

select | element | javascript{ 'value=' + storedVars['element_id']}

変数element_idが"222″の場合、"value=222″が選択されます。

想定通りに動くとやっぱりうれしいですね。
テストをしているときとは違う、プログラマの達成感をちょっぴり味わえます。^^
jsファイルには追加ができるので関数を作成してさらに回帰テストを充実させたいです。

kossyselenium,ツール,回帰テスト

Posted by ookoshi