Last active
February 6, 2023 16:49
-
-
Save kayhadrin/4a47497471e3228be629 to your computer and use it in GitHub Desktop.
Trigger mouse event programmatically. Useful to simulate mouse wheel events.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Simulate a mouse event to a given DOM element | |
* @param {string, WebElement} elem | |
* @param {string} evtName Event name | |
* @param {object} eventInitProps Properties to set on the mouse event | |
*/ | |
function triggerMouseEvent(elem, evtName, eventInitProps) { | |
return browser.executeScript(function(_elem, _evtName, _eventInitProps) { | |
var $ = window.jQuery; | |
elem = $(_elem); | |
var evt = document.createEvent('MouseEvents'); // not using "new WheelEvent()" because it doesn't work on IE9 yet. | |
var evtGroupName = _evtName + '.protractor'; | |
evt.initEvent(_evtName, true, true); | |
$.extend(evt, _eventInitProps); | |
elem.one(evtGroupName, function(e) { // create wheel event handler to do the vertical scroll programmatically | |
var originalEvent = e.originalEvent; | |
//DEBUG | |
// console.log('internal ' + e.type + ' handler: deltaY=', originalEvent.deltaY, ' detail=', originalEvent.detail, ' wheelDelta =', originalEvent.wheelDelta); | |
if (!e.isDefaultPrevented() && !originalEvent.shiftKey) { | |
var curElem = $(this); | |
curElem.scrollTop(curElem.scrollTop() + originalEvent.deltaY); | |
} | |
}); | |
elem.each(function() { | |
this.dispatchEvent(evt); | |
}) | |
.unbind(evtGroupName); | |
}, elem.getWebElement ? elem.getWebElement() : elem, evtName, eventInitProps); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How I can use it? Can I watch some examples? I need to trigger mousewheel events because scrollTo trigger just not work if I minimize window.