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 って拡張しやすいので便利やわ〜♪