SeleniumのテストをPHPで楽に書く
Seleniumのテストは次のようなテーブル要素を使って書く。
<tr> <td>open</td> <td>index.html</td> <td></td> </tr> <tr> <td>verifyText</td> <td>id=title1</td> <td>タイトル1</td> </tr> <tr> <td>verifyText</td> <td>id=title2</td> <td>タイトル2</td> </tr> <tr> <td>verifyText</td> <td>id=title3</td> <td>タイトル3</td> </tr> <tr> <td>clickAndWait</td> <td>submit</td> <td></td> </tr>
これが面倒。テストが多くなってきたり長くなってきたりすると、テストを修正するメンテコストも高くなってしまう。そこで、この部分を例えばPHPで次のように書けるようにすると視認性が向上してかなり楽になる。
<?php
$sw = new SeleniumWriter();
$sw->open('index.html');
$sw->verifyText('id=title1', 'タイトル1');
$sw->verifyText('id=title2', 'タイトル2');
$sw->verifyText('id=title3', 'タイトル3');
$sw->clickAndWait('submit');
?>
SeleniumWriterクラスは、単純にテーブル要素を書き出してくれればよい。このクラスは例えば次のようになる。
<?php
class SeleniumWriter {
public function __construct(){}
public function __call($name, $params) {
$params = array_merge((array)$name, $params);
call_user_func_array(array($this, 'writeTest'), $params);
}
protected function writeTest($func, $arg1 = "", $arg2 = "") {
echo "<tr><td>${func}</td><td>${arg1}</td><td>${arg2}</td></tr>";
}
}
?>
このクラスを元に独自のメソッドを加えたりして拡張すると便利だ。JavaScriptで同じようなオブジェクトを作ろうとしたけどちょっとうまくいかなかった。
コメントを残す