如何创建一个完美的假 jQuery 事件对象

R.L*_*R.L 4 javascript jquery jquery-events

我正在对网站进行自动化测试,但我无法在 - 特别是但不限于 - IE 中使用 javascript 正确触发某些事件。(我正在使用 selenium,但其他所有选项都不起作用,所以 javascript 是我最后的希望)

事件的函数似乎在 jquery 事件对象中使用了很多字段,我尝试按照官方的 jquery 文档进行操作,但是虽然它显示了大多数字段名称,但它没有显示如何填充它们(因为这不是你所做的)它通常,但在我的情况下是)

我的问题如下:

为了伪造鼠标事件,我应该使用什么以及如何填充Event 对象的字段(如何创建这些值)jQuery.Event("event type",{param1:value1,param2:value2,...})(如果有更有效的方法,则可以使用其他方法)

此事件对象将与 element.trigger('eventname',EventObject)

deb*_*ker 6

您是否阅读过 jQuery 文档触发事件处理程序

摘抄:

如果不是 .trigger(),我如何模仿原生浏览器事件?

为了触发本机浏览器事件,您必须对 < IE9 使用 document.createEventObject,对所有其他浏览器使用 document.createEvent。使用这两个 API,您可以以编程方式创建一个事件,该事件的行为就像某人实际单击了文件输入框一样。将发生默认操作,并显示浏览文件对话框。

jQuery UI 团队创建了jquery.simulate.js以简化触发原生浏览器事件以用于他们的自动化测试。它的用法模仿了 jQuery 的触发器。

基本上,整个内容可以总结如下:

function Settings() {
  this.bubbles = true;
  this.cancelable = true;
  this.view = window;
  this.screenX = 0;
  this.screenY = 0;
  this.clientX = 1;
  this.clientY = 1;
  this.ctrlKey = false;
  this.altKey = false;
  this.shiftKey = false;
  this.metaKey = false;
  this.button = 0; /* Which mouse button was pressed */
  this.relatedTarget = null;
  return this;
}

function simulateMouseEvent(type, target, s) {
  var e = document.createEvent("MouseEvents");
  e.initMouseEvent(type, s.bubbles, s.cancelable, s.view, 0, s.screenX, s.screenY, s.clientX, s.clientY, s.ctrlKey, s.altKey, s.shiftKey, s.metaKey, s.button, s.relatedTarget);
  target.dispatchEvent(e);
}

var settings = new Settings, target = document.getElementById('myButton');

/* Try with something like this: */
simulateMouseEvent('mousedown', target, settings);
simulateMouseEvent('mouseup', target, settings);
simulateMouseEvent('click', target, settings);
Run Code Online (Sandbox Code Playgroud)

来源:https : //github.com/jquery/jquery-simulate/blob/master/jquery.simulate.js

此处描述了完整的参数列表:MouseEvent.initMouseEvent()