2012年5月6日日曜日

[Selenium 2]マウスホバーの実現方法

いい加減にSelenium2ネタを消化してきます。
今回はマウスホバーの実現方法です。ただ最初に断っておきますけど、ページの作りか何かの影響を受けているのか、ページによっては全くマウスホバーイベントが発生しない場合がありました。もし100%確実に成功させる方法をご存じの方がいましたらご教示ください!

試した環境

  • ブラウザ:Firefox 9
  • JDK 6
  • Selenium 2.18
  • Windows 7 64bit
SeleniumとFirefoxのバージョンはちょっと古めとなっていますが、多分バージョン11とかでも大丈夫だと思います。
このエントリ書く当たって自宅PC環境で試してみたんですけど、現時点のSelenium最新バージョン2.21はFirefox12に対応していないようで動かず…

Actionsオブジェクト使用する方法(ただし非推奨)

Actions#moveToElementで実現できます。できるんですけど…

これだとマウスホバーがキープされません。よって「マウスホバーで動的に表示されたメニューをクリック」したい場合、以下のコードではダメです。

正しくは以下のコードです。ホバーとクリックを間髪入れずに連続実行しています。

「正しくは」といったものの、上記はただ連続実行しているだけで結局ホバーキープはできていないので、厳密には正解ではありません。実際、ホバー後のクリックが間に合わずにエラーとなってしまったケースが多々ありました。
補足
もしかしたらActions#clickAndHold()使えばいいかもしれん(厳密にはマウスホバーではないけど)。けど前述の通り自宅環境だとSeleniumが動かないので試せない。

ホバーキープしたい場合はDefaultSeleniumかますのが確実

以下の方法だとホバーキープされました。

ただし、冒頭でも述べましたが、これだとそもそもマウスホバーイベントが全く発生しないケースが少ないですがありました。
あと、z-indexが正しく解釈されないのか、動的表示したメニューをクリックしたとき、メニューではなくその奥にある要素がクリックされてしまうということも。

何かSelenium WebDriverってまだまだバグが多いな…何か忘れたけどびっくりするようなデグレが発生してた事もあったような。

参考

0 件のコメント: