Как создать идеальный фальшивый jQuery объект события - PullRequest
3 голосов
/ 26 февраля 2020

Я автоматизирую тесты для веб-сайта, и есть событие, которое я не могу правильно запустить, используя javascript, в особенности, но не ограничиваясь, IE. (я использую селен, но все остальные опции не работали, поэтому javascript - моя последняя надежда)

Кажется, что функция события использует много полей в объекте jquery Event, я пробовал следуя официальной официальной jquery документации , но при отображении имени большинства полей он не показывает, как их заполнить (потому что обычно это не то, что вы делаете с ним, но в моем случае это так)

у меня следующий вопрос:

для того, чтобы подделать событие мыши что и как мне заполнить поля (как определить, как эти значения получить) события объект, использующий jQuery.Event("event type",{param1:value1,param2:value2,...}) (или другой метод, если это эффективнее)

этот объект события должен использоваться с element.trigger('eventname',EventObject)

Ответы [ 3 ]

5 голосов
/ 01 марта 2020

Читали ли вы эту jQuery документацию Запуск обработчиков событий ?

Выдержка:

Как я могу mimi c собственное событие браузера, если не .trigger ()?

Чтобы вызвать событие собственного браузера, необходимо использовать document.createEventObject для

Команда пользователя jQuery создала 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 ()

0 голосов
/ 26 февраля 2020

// создаем объект Event в JQuery

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);
});
0 голосов
/ 26 февраля 2020

Вы можете использовать функцию trigger () для достижения этой цели. Инициируйте событие, как это

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

, и вы сможете прослушивать в любом месте

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

Я надеюсь, что это работает !!

...