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



我正在为一个网站自动化测试,有一些事件我无法在IE中使用javascript正确触发,尤其是但不限于IE。(我正在使用selenium,但其他所有选项都不起作用,所以javascript是我最后的希望(

事件的函数似乎使用了jquery event对象中的许多字段,我尝试过遵循官方的jquery文档,但虽然它显示了大多数字段的名称,但没有显示如何填充它们(因为这不是你通常使用它的方式,但在我的情况下是这样(

我的问题如下:

为了伪造鼠标事件使用jQuery.Event("event type",{param1:value1,param2:value2,...})(或其他方法,如果有更有效的方法(填充event对象的字段(如何生成这些值(

该事件对象将与element.trigger('eventname',EventObject)一起使用

您读过jQuery文档触发事件处理程序吗?

摘录:

如果不是.trigger((,我如何模拟本机浏览器事件

为了触发本机浏览器事件,您必须使用document.createEventObject for<IE9和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);

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

完整的参数列表如下所述:MouseEvent.initMouseEvent((

//在JQuery 中创建一个Event对象

var event = jQuery.Event("damn");
event.param1 = "value1";
event.param2 = "value2";

//触发事件

$( ".some_element" ).trigger( event );

//接收事件

$('.some_element').on("damn", function(e){
console.log(e.param1,e.param2);
});

您可以使用trigger((函数来实现这一点。触发类似的事件

$('.some_element').trigger("damn", {param1:"value1",param2:"value2"});

你可以在任何地方收听

$('.some_element').on("damn", function(e,obj){
console.log(obj.param1,obj.param2);
});

我希望这能奏效!!

最新更新