F.Ko-Jiの「一秒後は未来」

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で同じようなオブジェクトを作ろうとしたけどちょっとうまくいかなかった。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など