ボタン2度押しコマンド
セキュリティ対応の一環でsubmitボタン2度押し対策ができてるか試験するためにボタン2度押しコマンドがあるとよいだろうと。
clickコマンドを元にして、clickTwiceコマンドを一応作った。
/* * Click Twice on the located element, and attach a callback to notify * when the page is reloaded. */ Selenium.prototype.doClickTwice = function(locator) { var element = this.page().findElement(locator); this.page().clickElement(element); this.page().clickElement(element); };
元のclickコマンドにthis.page().clickElement(element);を一行加えただけ(笑)
実は、本家HPのコマンドリファレンスに「openとclickはデフォルトでページローディングを待ちます」って書いてあったから、clickコマンド+clickAndWaitコマンドでは用が足りない?と思ったのがこのコマンド作ろうと思った背景なんだけど、開発チームの人に確認してみたらopenだけだった(笑)
ので、、click+clickAndWaitで用は足りそう。
でも、click+clickAndWaitだとfindElementを余計に呼ぶことになるからclickTwiceの方が早いかも?(せっかく作ったから計測してみよう)
clickTwice内の各メソッド前後にgetTimeを埋めてみる。
/* * Click Twice on the located element, and attach a callback to notify * when the page is reloaded. */ Selenium.prototype.doClickTwice = function(locator) { LOG.debug("before findElement:" + new Date().getTime() ); var element = this.page().findElement(locator); LOG.debug("after findElement:" + new Date().getTime() ); this.page().clickElement(element); LOG.debug("after clickElement:" + new Date().getTime() ); this.page().clickElement(element); LOG.debug("after clickElement:" + new Date().getTime() ); };
結果。
項目 | 1回目 | 2回目 | 3回目 | 4回目 | 5回目 |
---|---|---|---|---|---|
before findElement | 1147156868828 | 1147157113031 | 1147157231875 | 1147157298609 | 1147157349937 |
after findElement | 1147156868828 | 1147157113031 | 1147157231875 | 1147157298609 | 1147157349937 |
after clickElement | 1147156868859 | 1147157113046 | 1147157231890 | 1147157298625 | 1147157349953 |
after clickElement | 1147156868890 | 1147157113078 | 1147157231921 | 1147157298656 | 1147157349984 |
で、、
項目 | 1回目 | 2回目 | 3回目 | 4回目 | 5回目 | AVG |
---|---|---|---|---|---|---|
findElement | 0 | 0 | 0 | 0 | 0 | 0 |
clickElement1 | 31 | 15 | 15 | 16 | 16 | 19 |
clickElement2 | 31 | 32 | 31 | 31 | 31 | 31 |
というわけでfindElementにはほぼ時間かかってない。。
じゃあ。。clickTwiceAndWaitとclick+clickAndWaitのターンアラウンドタイムを計ってみよう。
時間出力用のコマンドを作って、、 引数のコメントも一緒に出力と。
// output timestamp for debugging Selenium.prototype.doOutputTime = function(text) { LOG.info(text + " : " + new Date().getTime() ); };
テストケースの方では計測したいコマンドの前後をこいつで挟む、と。
<tr> <td>outputTime</td> <td>before clickTwice</td> <td></td> </tr> <tr> <td>clickTwiceAndWait</td> <td>//input[@value='削除']</td> <td></td> </tr> <!-- <tr> <td>click</td> <td>//input[@value='削除']</td> <td></td> </tr> <tr> <td>clickAndWait</td> <td>//input[@value='削除']</td> <td></td> </tr> --> <tr> <td>outputTime</td> <td>after clickTwice</td> <td></td> </tr>
結果。
command | 1回目 | 2回目 | 3回目 | 4回目 | 5回目 | 6回目 | 7回目 | 8回目 | 9回目 | 10回目 | AVG |
---|---|---|---|---|---|---|---|---|---|---|---|
clickTwiceAndWait | 125 | 172 | 203 | 171 | 172 | 141 | 156 | 156 | 140 | 188 | 162.4 |
click+clickAndWait | 141 | 125 | 125 | 125 | 125 | 140 | 172 | 187 | 125 | 203 | 146.8 |
うーむ。clickTwiceの方が平均で15.6msec速い。。。 15.6msecかぁ。なんか微妙w
ま、一応あってもいいかな、くらい。
ミーティングで採用するかどうか決めよう。