2011-07-18 168 views
15

我正在尝试使用WebDriver进行自动化测试,但它目前无法模拟鼠标滚轮事件。作为一种解决方法,我试图用JavaScript代替这些事件。我现在正在做一切直接HTML页面上的试验,而不是在WebDriver框架中。如何用JavaScript在Firefox中触发鼠标滚轮事件?

我特别试图在滚动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> 

下面的函数被调用时,能够火在Ch​​rome和IE9鼠标滚轮事件,并得到与预期的行为,上述处理器回升。

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

当然,它不适用于Firefox。我发现现有的文档太稀疏,难以理解FF如何处理这个问题。任何人都可以向我展示在火狐浏览器中用轮子三角洲(放在FF期望的地方)触发鼠标滚轮事件的最低限度,这样我的处理程序就可以检测到它了吗?

+0

我总是想知道为什么人们想要直接这样激发本地事件。如果它是你的页面和你的代码,并且你想看到鼠标滚动的效果,为什么不直接调用当你的代码收到鼠标滚动事件时执行的函数。你应该能够将代码从你的代码中分解出来,直接调用它,而不需要通过事件系统,然后它将具有零浏览器依赖性,并且可以在任何地方工作。 – jfriend00

+3

因为这不仅仅是我的代码,我甚至没有兴趣作为我的应用程序的一部分发射事件。我试图将应用程序作为质量保证过程的一部分来运行,对我们来说,我们并没有开始修改遍布各处的代码,这一点很重要。 –

+0

确定 - 帮助您知道您正在尝试做什么。是否有专门用于网页QA测试的专业工具来模拟各种用户事件,包括各种鼠标事件以及这些工具在系统级别注入事件,以便它们可以在所有浏览器中使用? – jfriend00

回答

11

好,

  1. 在代码的Mozilla的一部分,如果你正在收听的DOMMouseScroll你应该派遣一个DOMMouseScroll事件也一样,不是吗? (鼠标滚轮似乎是一个Microsoft invention copied by webkit, but not Gecko)。
  2. 而不是设置(只读)属性的事件,你应该调用适当的init...()方法,这对于鼠标事件是initMouseEvent()。 (spec

这里有一个固定起来的测试用例,这在Firefox工作:http://jsfiddle.net/6nnMV/

或许不会对你有用,但可能会感兴趣的其他人看,以模拟事件,这里是如何(特权)单元在mozilla中进行模拟“真实”事件的测试:http://hg.mozilla.org/mozilla-central/annotate/a666b4f809f0/testing/mochitest/tests/SimpleTest/EventUtils.js#l248

+0

根据规范,它似乎initWheelEvent()可能是一个更好的选择(或者是这种情况下,通常还没有实现?)。演示很清晰,但参考文献非常宝贵。谢谢。 –

+0

@jaquadro:是的,没有在Mozilla中:http://mxr.mozilla.org/mozilla-central/search?string=initWheelEvent – Nickolay

+0

为什么你选择值“120”,我认为是“滚动量”值?这实际上转化为什么? – thisissami

相关问题