我是using jQuery來解決Selenium中的拖放issue。不過,我是一名jQuery初學者,並且找不到使用jQuery在特定位置放置JavaScript元素的OOTB解決方案。如何使用jQuery在特定位置放置JavaScript對象?
我使用的腳本是這樣的:
(function($) {
$.fn.simulateDragDrop = function(options) {
return this.each(function() {
new $.simulateDragDrop(this, options);
});
};
$.simulateDragDrop = function(elem, options) {
this.options = options;
this.simulateEvent(elem, options);
};
$.extend($.simulateDragDrop.prototype, {
simulateEvent: function(elem, options) {
/*Simulating drag start*/
var type = 'dragstart';
var event = this.createEvent(type);
this.dispatchEvent(elem, type, event);
/*Simulating drop*/
type = 'drop';
var dropEvent = this.createEvent(type, {});
dropEvent.dataTransfer = event.dataTransfer;
this.dispatchEvent($(options.dropTarget)[0], type, dropEvent);
/*Simulating drag end*/
type = 'dragend';
var dragEndEvent = this.createEvent(type, {});
dragEndEvent.dataTransfer = event.dataTransfer;
this.dispatchEvent(elem, type, dragEndEvent);
},
createEvent: function(type) {
var event = document.createEvent("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;
},
dispatchEvent: function(elem, type, event) {
if(elem.dispatchEvent) {
elem.dispatchEvent(event);
}else if(elem.fireEvent) {
elem.fireEvent("on"+type, event);
}
}
});
})(jQuery);
我打電話simulateDragDrop
與硒的JavascriptExecutor
2個JS對象(被拖動對象和目標對象)。問題出在我想將第一個對象放在一個位置而不是放在一個對象上,並將它放在目標對象的左上角。
如何更改腳本(或者可能使用不同的腳本),以便它可以接受放置的位置(如果可能的話......)?
我可以更改腳本,使其落在目標對象的中心嗎?
一個小問題是,它是爲了自動化測試的目的,並且AUT不包含jQuery,我正在注入它。
一個可能的解決方案我想過用它獲取元素使用document.elementFromPoint(x, y);
位置,但仍然會砸在這個元素的左上角...
不幸的是,這會將事件分派給目標元素,導致它落在元素的左上角。如果元素是一種編輯器(就像我的情況),它不是接近我想要的偏移量......如果我可以放在目標元素的中間,它可以解決我的問題。 – Moshisho
該下拉可能使用事件上的鼠標座標。我會嘗試使用鼠標事件。查看更新後的答案。請注意,你應該提供一個可重複的例子。試圖猜測如何實現拖放並不理想。 –
仍然沒有運氣...編輯器是用REACT實現的,可能是由一些第三方庫實現的,所以我沒有一個確切的例子,但可能[this](http://jqueryui.com/resources/demos/droppable/default .html)適合。無論如何,我不確定這是甚麼可能,非常感謝。 – Moshisho