IE上でDOMやCSSを書き換え可能な拡張「DOM Helper」
その場で書き換えできるのはいい。でも.Net Framework2.0以降が必要かぁ。。
Web開発を支援するツールバーfor IE.
MS製だし(?)こっちをインストールしてみた。
Seleniumで動的な値を扱う
テストにおいては各試験項目に見合ったテストデータを使用するわけですが、「今日の日付」など動的な値を扱わなければいけない場合があります。例えば書籍の貸し出しを行うと「貸出日」がアプリケーションで記録される、という場合に貸出日はテストを実行した日付になるため、テストケースで予め固定した値を書いておくわけにはいきません。
そのような動的な値をSeleniumにおいて扱う方法を試してみました。
Javascript+変数を使用する。
まずは、Seleniumで提供されている変数の仕組みを利用する方法です。
storeコマンドを使うとjavascriptを使って出力する値を変数に入れることができます。
そしてそれ以降のコマンドでは%変数名%と指定することで変数値を使用することができます。ここでは今日の日付を取得して「MM/DD」という形式で変数値を設定してみます。
<!-- 日付を取得して変数TODAYを作成 --> <tr> <td>store</td> <td>javascript{((new Date()).getMonth() + 1) + '/' + (new Date()).getDate()}</td> <td>TODAY</td> </tr> <!-- 変数TODAYを使用してコマンドを実行 --> <tr> <td>type</td> <td>searchword</td> <td>${TODAY}</td> </tr> <tr> <td>verifyText</td> <td>id=BookRentDay</td> <td>${TODAY}</td> </tr>
上記変数を利用した結果は以下のようになります(キーワード欄)。
Javascriptは上記のような単文だけでなく、複数の文を使うことも可能です。ここでは「YYYY年MM月DD日」という書式で変数に設定してみます。
<tr> <td>store</td> <td>javascript{td = new Date();yy = td.getYear(); mm = td.getMonth() + 1;dd = td.getDate(); yy + '年' + mm + '月' + dd + '日'}</td> <td>TODAY</td> </tr> 〜以下同様〜
このようにJavascriptを使って取得及び加工した値を変数としてテストケースで使用することができます。
DbUnitでDB更新の期待値を検証
DB更新を伴うテストの場合、Selenium単体では画面上の表示は検証できますが、DBそのものがちゃんと更新されているかどうかの検証はできません。そのような場合にはDbUnitを利用するというのも一つのアイデアかと思います。DbUnitを利用した「DB更新検証用サーブレット」を作成してSeleniumのテストケースから呼び出すというわけです。
DB更新検証用サーブレット ExcelでDB更新の期待値を作成 <- assert -> DBの値を取得
DbUnitを使用する際の一つの方法としてExcelファイルを用いる方法がありますが、そのExcelファイル(更新期待値)に動的な値を設定する方法を書いていきます。
まず、Excelファイルでは動的な値を設定したいセルに変数を記述します。ここでは[TODAY]という変数を設定してみました。
java側のソースでは、ReplacementDataSetクラスのaddReplacementObjectメソッドを使用してエクセルで記述した[TODAY]部分に今日の日付を設定しています。その上でgetTableメソッドで指定したテーブル(この例ではrentalテーブル)の情報を取得しています。
// 実際のテーブル情報を取得 IDataSet actualDataSet = dbconn.createDataSet(); ITable actualTable = actualDataSet.getTable("rental"); // 期待値テーブル情報を取得 File expectedFile = ResourceUtils.getFile( this.getClass().getResource( XLS_EXPT_DIR + "/expectedData.xls")); ReplacementDataSet expectedDataSet = new ReplacementDataSet(new XlsDataSet(expectedFile)); expectedDataSet.addReplacementObject("[TODAY]", dfm.format(dt)); ITable expectedTable = expectedDataSet.getTable("rental"); // 実際のテーブル情報と期待値のテーブル情報を比較して検証 Assertion.assertEquals(expectedTable, actualTable);