20

WebDriverを使用して自動テストを実行しようとしていますが、現在、マウスホイールイベントをシミュレートする機能がありません。回避策として、代わりにJavaScriptを使用してこれらのイベントを発生させようとしています。私は現在、WebDriverフレームワーク内ではなく、まっすぐなHTMLページですべての実験を行っています。

具体的には、スクロールするdiv要素でマウスホイールイベントを発生させようとしています。

これまでのところ、ChromeとIE9でこれを行うことができましたが、Firefox(5.x)では何も機能しないようです。

次のクロスブラウザコードを使用して、マウスホイールイベントが発生したことを検出しています。これは、ネットから奪い取ったものです。このコードは、作成したスクロールdiv(id ='view')内でマウスホイールをスクロールすると、すべてのブラウザーでイベントを取得できます。

<script type="text/javascript">
  function wheel(event) {
    var delta = 0;
    if (!event) {
      event = view.event;
    }
    if (event.wheelDelta) {
      delta = event.wheelDelta / 120;
    }
    else if (event.detail) {
      delta = -event.detail / 3;
    }
    
    alert(delta);
  }
  
  var view = document.getElementById('view');
  
  if (view.addEventListener) {
    view.addEventListener('DOMMouseScroll', wheel, false);
  }
  
  view.onmousewheel = wheel;
</script>

以下の関数は、呼び出されると、ChromeおよびIE9でマウスホイールイベントを発生させることができ、期待される動作で上記のハンドラーで取得されます。

function ChromeWheel () {
  var evt = document.createEvent("MouseEvents");
  evt.initEvent('mousewheel', true, true);
  evt.wheelDelta = 120;
  view.dispatchEvent(evt);
}

もちろん、Firefoxでは機能しません。FFがこれをどのように処理するかを知るには、既存のドキュメントがあまりにもまばらで混乱していることがわかりました。Firefoxでマウスホイールイベントをホイールデルタ(Firefoxが期待する場所に配置)で起動して、ハンドラーがそれを取得できるようにするための最低限のことを誰かに教えてもらえますか?

4

1 に答える 1

15

上手、

  1. コードのMozillaの部分で、DOMMouseScrollをリッスンしている場合は、DOMMouseScrollイベントもディスパッチする必要があります。(mousewheelはwebkitによってコピーされたMicrosoftの発明のようですが、Geckoではありません)。
  2. イベントに(読み取り専用)プロパティを設定する代わりに、適切なinit...()メソッドを呼び出すことになっています。これは、マウスイベントの場合はinitMouseEvent()です。(スペック

これがFirefoxで動作する修正されたテストケースです:http://jsfiddle.net/6nnMV/

おそらくあなたには役に立たないかもしれませんが、イベントをシミュレートしようとしている他の人々には興味があるかもしれません。mozillaの(特権)ユニットテストが「実際の」イベントをシミュレートする方法は次のとおりです。http://hg.mozilla.org/mozilla-central/annotate/ a666b4f809f0 / tests / mochitest / tests / SimpleTest / EventUtils.js#l248

于 2011-07-18T23:27:30.747 に答える