gpt4 book ai didi

javascript - 如何使用 JavaScript 在 Firefox 中触发鼠标滚轮事件?

转载 作者:行者123 更新时间:2023-12-02 22:31:22 27 4
gpt4 key购买 nike

我正在尝试使用 WebDriver 进行自动化测试,但它目前无法模拟鼠标滚轮事件。作为一种解决方法,我尝试使用 JavaScript 来触发这些事件。我现在正在一个直接的 HTML 页面上进行所有的实验,而不是在 WebDriver 框架内。

我专门尝试在滚动 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 期望的位置),以便我的处理程序能够拾取它?

最佳答案

嗯,

  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

关于javascript - 如何使用 JavaScript 在 Firefox 中触发鼠标滚轮事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6735830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com