value属性で指定できるElementLocator
引き続きseleniumを試しているんだけど、value属性はあるけれどname属性がないタグを指定できるElementLocatorがない。例えばsubmitボタンはvalue属性の値がボタンに表示されるので、value属性は指定するけどname属性は指定していないことが多かったが、そうするとsubmitボタンを押すことができない。またStrutsのhtml:submitタグはname属性が指定できない。
そこでvalue属性で指定できるElementLocatorを作ってみた。selenium-browserbot.jsに以下を追加する。それだけ。
PageBot.prototype.locateElementByValue = function(identifier, inDocument) { var allElements = inDocument.getElementsByTagName("*"); for (var i = 0; i < allElements.length; i++) { var testElement = allElements[i]; if (testElement.value && testElement.value === identifier) { return testElement; } } return null; };
そうすると
<input type="submit" value="ログイン">
は
<tr> <td>clickAndWait</td> <td>value=ログイン</td> <td> </td> </tr>
でクリックできるようになる。
で、これを作った後
<tr> <td>clickAndWait</td> <td>//input[@value='ログイン']</td> <td> </td> </tr>
とすればvalue属性で指定できることがわかった。orz
でも「value=foo」の方がわかりやすいよね、ね。