label ロケーターの追加と、フォーカスの有る Element を取得するアクセサー(?)の追加

label には for 属性が有って、関連している Element を指定できる。
で、その label をクリックすると関連している Element にフォーカスが移る。

<label for="text_to">Text:</label> <input type="text" id="text_to" name="text_to">

とかしておくと、 Text: って label をクリックすると text_to ってテキストボックスにフォースが移る訳ね。
で、その試験もあって・・・Selenium で label を簡単に指定できる Element locator が無かったので作った。


user-extensions.js に追加

PageBot.prototype.locateElementByLabel = function(text, inDocument ){
  var labels = inDocument.getElementsByTagName('label');
  for (var i = 0; i < labels.length; i++) {
    var element = labels[i];
    if (PatternMatcher.matches(text, getText(element))) {
      return element;
    }
  }
  return null;
};


ってしておくと

<tr>
  <td>click</td>
  <td>label=Text:</td>
  <td></td>
</tr>

ってすると、Text: って label をクリックしたことになります〜(あんまり用途は無いと思うけど・・・)


で、クリックされてテキストボックスにフォーカスが移った確認もしないといけないので・・・フォーカスがどこにあるのか調べる方法は


フォーカスされている要素を取得する方法 - sawatのブログ


に、有ったんですけど Firefox でうまくいきません。記事が古くて Firefox がその時の物と違うからかな〜っと。
まあ、IE でやるので気にせずそのまま流用してコードを書く!


user-extensions.js に追加

Selenium.prototype.isFocus = function( locator ){

  var element1 = (this.page().getDocument().activeElement || this.page().getCurrentWindow().getSelection().focusNode); // IE & Opera || Firefox
  var element2 = this.browserbot.findElement(locator);

  return element1 == element2;
};


ってしておくと

<tr>
  <td>verifyFocus</td>
  <td>name=text_to</td>
  <td>true</td>
</tr>

とかで、フォーカスの有無をチェックできまする。


Firefox でフォーカスの有るオブジェクトを取得する方法って無いのかな〜


Selenium って拡張しやすいので便利やわ〜♪