如何创建一个完美的假 jQuery 事件对象
How to create a perfect fake jQuery Event object
我正在对一个网站进行自动化测试,有些事件我无法在 - 特别是但不限于 - IE 中使用 javascript 正确触发。 (我正在使用 selenium,但所有其他选项都不起作用,所以 javascript 是我最后的希望)
事件的函数似乎在 jquery 事件对象中使用了很多字段,我尝试遵循 official jquery documentation 但是虽然它显示了大多数字段名称但没有显示如何填充它们(因为这不是你通常用它做的,但在我的情况下是)
我的问题如下:
为了伪造鼠标事件 我应该使用 jQuery.Event("event type",{param1:value1,param2:value2,...})
填充 Event 对象的哪些字段(如何设置这些值) (或其他方法,如果有更有效的方法)
此事件对象将与 element.trigger('eventname',EventObject)
一起使用
您可以使用 trigger() 函数来实现此目的。
像这样触发事件
$('.some_element').trigger("damn", {param1:"value1",param2:"value2"});
而且您可以在任何地方收听
$('.some_element').on("damn", function(e,obj){
console.log(obj.param1,obj.param2);
});
我希望这有效!!
//在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);
});
您是否阅读了这份 jQuery 文档 Triggering Event Handlers?
摘录:
How can I mimic a native browser event, if not .trigger()?
In order to trigger a native browser event, you have to use
document.createEventObject for < IE9 and document.createEvent for all
other browsers. Using these two APIs, you can programmatically create
an event that behaves exactly as if someone has actually clicked on a
file input box. The default action will happen, and the browse file
dialog will display.
The jQuery UI Team created jquery.simulate.js in order to simplify
triggering a native browser event for use in their automated testing.
Its usage is modeled after jQuery's trigger.
基本上,整个东西可以概括如下:
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()
我正在对一个网站进行自动化测试,有些事件我无法在 - 特别是但不限于 - IE 中使用 javascript 正确触发。 (我正在使用 selenium,但所有其他选项都不起作用,所以 javascript 是我最后的希望)
事件的函数似乎在 jquery 事件对象中使用了很多字段,我尝试遵循 official jquery documentation 但是虽然它显示了大多数字段名称但没有显示如何填充它们(因为这不是你通常用它做的,但在我的情况下是)
我的问题如下:
为了伪造鼠标事件 我应该使用 jQuery.Event("event type",{param1:value1,param2:value2,...})
填充 Event 对象的哪些字段(如何设置这些值) (或其他方法,如果有更有效的方法)
此事件对象将与 element.trigger('eventname',EventObject)
您可以使用 trigger() 函数来实现此目的。 像这样触发事件
$('.some_element').trigger("damn", {param1:"value1",param2:"value2"});
而且您可以在任何地方收听
$('.some_element').on("damn", function(e,obj){
console.log(obj.param1,obj.param2);
});
我希望这有效!!
//在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);
});
您是否阅读了这份 jQuery 文档 Triggering Event Handlers?
摘录:
How can I mimic a native browser event, if not .trigger()?
In order to trigger a native browser event, you have to use document.createEventObject for < IE9 and document.createEvent for all other browsers. Using these two APIs, you can programmatically create an event that behaves exactly as if someone has actually clicked on a file input box. The default action will happen, and the browse file dialog will display.
The jQuery UI Team created jquery.simulate.js in order to simplify triggering a native browser event for use in their automated testing. Its usage is modeled after jQuery's trigger.
基本上,整个东西可以概括如下:
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()