ボタン名で指定できるElementLocator

前にも書いたけど現状ではname属性がないボタンを(簡単に)クリックすることができない。
でも、リンクをlink=fooで指定できるんだったらボタンをbutton=barで指定できたっていいじゃないかということで、以下はボタン名で指定できるElementLocator。またまたselenium-browserbot.jsに以下を追加するだけ。

PageBot.prototype.locateElementByButton = function(identifier, inDocument) {
    var elements = inDocument.getElementsByTagName("input");
    if (elements) {
    	for (var i = 0; i < elements.length; i++) {
    		var element = elements[i];
    		var attr = element.getAttribute("type");
    		if ((attr == "submit") || (attr == "button") || (attr == "reset")) {
    			if (element.getAttribute("value") == identifier) {
    				return element;
    			}
    		}
    	}
    }
    
    return null;
};

これで


というボタンは

<tr>
  <td>clickAndWait</td>
  <td>button=押しちゃダメ</td>
  <td>&nbsp;</td>
</tr>

と書けばクリックできる。button=の値にはボタンに表示されているラベル名を指定すればよいので、テストケースも書きやすくなる。
これでボタン押し放題。