Не работает пользовательское перетаскивание транспортира

#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 может быть сложным для имитации в зависимости от того, как оно реализовано на странице.