#javascript #html #node.js #selenium #protractor
#javascript #HTML #node.js #selenium #транспортир
Вопрос:
Мне нужно переместить элемент с помощью мыши, но поскольку собственный browser.action() не работает, я пытаюсь использовать для этого следующий метод:
module.exports = function simulateDragDrop(sourceNode, destinationNode) {
console.log('simulatingDragDrop');
var EVENT_TYPES = {DRAG_END: 'dragend', DRAG_START: 'dragstart', DROP: 'drop'}
function createCustomEvent(type) {
console.log('createCustomEvent');
var event = new CustomEvent("CustomEvent")
event.initCustomEvent(type, true, true, null)
event.dataTransfer = {
data: {}, setData: function (type, val) {
this.data[type] = val
}, getData: function (type) {
return this.data[type]
}
}
return event
}
function dispatchEvent(node, type, event) {
if (node.dispatchEvent) {
return node.dispatchEvent(event)
}
if (node.fireEvent) {
return node.fireEvent("on" type, event)
}
}
var event = createCustomEvent(EVENT_TYPES.DRAG_START)
dispatchEvent(sourceNode, EVENT_TYPES.DRAG_START, event)
var dropEvent = createCustomEvent(EVENT_TYPES.DROP)
console.log(event.dataTransfer);
console.log(dropEvent.dataTransfer);
dropEvent.dataTransfer = event.dataTransfer
dispatchEvent(destinationNode, EVENT_TYPES.DROP, dropEvent)
var dragEndEvent = createCustomEvent(EVENT_TYPES.DRAG_END)
dragEndEvent.dataTransfer = event.dataTransfer
dispatchEvent(sourceNode, EVENT_TYPES.DRAG_END, dragEndEvent)
Затем в самом тесте у меня есть:
var dragAndDropFn = require('../../../services/native_js_drag_and_drop_helper');
let elementA = element(by.automationId('ElementA'));
let elementB = element(by.automationId('ElementB'));
browser.executeScript(dragAndDropFn, elementA.getWebElement(), elementB.getWebElement());
Он работает на простой тестовой странице html5, но когда я использую его в своем приложении, он ничего не делает:
Мой html:
<div _ngcontent-kxy-11="" class="handle" draggable="true" automationid="ElementA">
<i _ngcontent-kxy-11="" class="icon-draghandle"></i>
и то же самое с ElementB. Я должен отметить, что элементы найдены, и это не проблема. У вас есть какие-нибудь идеи?
Комментарии:
1. Можете ли вы предоставить воспроизводимый пример? Перетаскивание в HTML5 может быть сложным для имитации в зависимости от того, как оно реализовано на странице.