Skip to content

Instantly share code, notes, and snippets.

@kayhadrin
Last active February 6, 2023 16:49
Show Gist options
  • Save kayhadrin/4a47497471e3228be629 to your computer and use it in GitHub Desktop.
Save kayhadrin/4a47497471e3228be629 to your computer and use it in GitHub Desktop.
Trigger mouse event programmatically. Useful to simulate mouse wheel events.
/**
* 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);
}
@KhorAMus
Copy link

browser is not defined

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment