【问题标题】:Trigger mouse wheel scroll event - puppeteer触发鼠标滚轮滚动事件 - puppeteer
【发布时间】:2018-01-10 21:16:59
【问题描述】:

我有一个脚本,我需要在其中测试页面上的滚动功能。我有两个滚动条,一个用于浏览器窗口,另一个用于实现无限滚动的网格。我正在像这样测试浏览器窗口滚动:

(async () => {

    const innerWidth = await page.evaluate(_ => { return window.innerWidth} );
    const innerHeight = await page.evaluate(_ => { return window.innerHeight} );
    const mouse = page.mouse
    await mouse.move(innerWidth/2, innerHeight/2);

    await page.waitFor(500);

    // Scroll Window
    page.evaluate(_ => {
        window.scrollBy(0, innerHeight);
    });     
    ...
}();

这适用于窗口滚动,但是,我不能用它来测试网格中的鼠标滚轮滚动。我知道有一种方法可以在 JQuery 中创建鼠标滚轮事件,如下所示:

$(".testdiv").on('mousewheel', function(e){
  console.log(e);

})
var event = jQuery.Event( "mousewheel" );
event.deltaY = -1;
$(".testdiv").trigger(event); 

我需要在纯 JS 中执行此操作。有没有办法在我的脚本中用纯 JS 实现这一点?

【问题讨论】:

    标签: javascript jquery html testing


    【解决方案1】:

    你要的是用纯JS实现鼠标滚轮,测试一下;即调用自定义事件。

    为了添加鼠标滚轮监听器

    yourdomNode.addEventListener('mousewheel', ()=>{
        //Some mousewheel listener
    });
    

    如果您想发送一个用于测试的自定义事件,您可以执行以下操作。您当然可以在创建的事件中添加更多符合您的测试目的的信息。

    var cEvent = new Event('mousewheel');
    
    cEvent.detail = 0;
    cEvent.wheelDeltaY = someWheelDeltaY;
    cEvent.wheelDeltaX = someWeelDeltaX;
    
    if (cEvent.wheelDeltaY) {
      cEvent.wheelDelta = somewheelDeltaY;
    } else if (cEvent.wheelDeltaX) {
      cEvent.wheelDelta = someWheelDeltaX;
    }
    
    yourdomNode.dispatchEvent(cEvent);
    

    【讨论】:

    • 好的,我想我理解了一般原理,我正在创建一个自定义事件。但是,我不确定这在我的具体情况下如何工作。我需要做的就是将鼠标移动到页面中的特定点,如下所示:await mouse.move(innerWidth/2, innerHeight/2);,然后触发鼠标滚动事件。换句话说,它不依赖于特定的 DOM 节点。
    • 无论谁在阅读我的评论,我都会很高兴发现我弄错了,因为我已经搜索了很长时间。您无法在浏览器中控制鼠标或键盘本身。您可以做的是创建自定义事件,并通过 dom 节点触发它们。确保这将通过您的事件侦听器的管道。
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 2012-03-13
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多