[英]How to test Angular Material Drag and Drop with Protractor
我正在使用angular 7應用程序,並且正在使用角度材質(目前為v7.3.7),但無法使用量角器測試拖放。
我嘗試下載角形材料源代碼以了解如何做,但是我發現任何與拖放相關的e2e測試。
我正在嘗試以下代碼,並且我確定元素在dom中,並且它們是可單擊的且可見的。
browser.actions().dragAndDrop(justCreatedActivity,nextColumn);
我確定我在某種程度上錯了。 有人可以幫我嗎?
謝謝
嘗試將.perform()
添加到鏈的末尾: browser.actions().dragAndDrop(justCreatedActivity,nextColumn).perform();
從量角器API中 :
// Dragging one element to another.
browser.actions().
mouseDown(element1).
mouseMove(element2).
mouseUp().
perform();
// You can also use the `dragAndDrop` convenience action.
browser.actions().
dragAndDrop(element1, element2).
perform();
// Instead of specifying an element as the target, you can specify an offset
// in pixels. This example double-clicks slightly to the right of an element.
browser.actions().
mouseMove(element).
mouseMove({x: 50, y: 0}).
doubleClick().
perform();
有時使用量角器API進行拖放時,HTML 5元素不起作用。 一種替代方法是使用j Query或Java腳本函數:
使用適當的定位器識別源元素和目標元素,然后傳遞給以下功能。
async PerformDragAndDrop(source: ElementFinder, target: ElementFinder){
browser.executeScript("function createEvent(typeOfEvent) {\n" +
"var event = document.createEvent('CustomEvent');\n" +
"event.initCustomEvent(typeOfEvent, true, true, null);\n" +
" event.dataTransfer = {\n" +
" data: {},\n" +
" setData: function (key, value) {\n" +
" this.data[key] = value;\n" +
" },\n" +
" getData: function (key) {\n" +
" return this.data[key];\n" +
" }\n" +
" };\n" +
" return event;\n" +
"}\n" +
"\n" +
"function dispatchEvent(element, event, transferData) {\n" +
" if (transferData !== undefined) {\n" +
" event.dataTransfer = transferData;\n" +
" }\n" +
" if (element.dispatchEvent) {\n" +
" element.dispatchEvent(event);\n" +
" } else if (element.fireEvent) {\n" +
" element.fireEvent('on' + event.type,event);\n" +
" }\n" +
"}\n" +
"\n" +
"function simulateHTML5DragAndDrop(element, target) {\n"
" var dragStartEvent =createEvent('dragstart');\n" +
" dispatchEvent(element, dragStartEvent);\n" +
" var dropEvent = createEvent('drop');\n" +
" dispatchEvent(target, dropEvent,dragStartEvent.dataTransfer);\n" +
" var dragEndEvent = createEvent('dragend'); \n" +
" dispatchEvent(element, dragEndEvent,dropEvent.dataTransfer);\n" +
"}\n" +
"\n" +
"var source = arguments[0];\n" +
"var target = arguments[1];\n" +
"simulateHTML5DragAndDrop(source,target);", source, target);
}
我使用Angular和Material拖放進行以下操作:
private async dragAndDrop(element: WebElement, destination: WebElement) {
await browser.actions().mouseDown(element).perform();
await browser.actions().mouseMove(destination).perform();
await browser.actions().mouseUp(destination).perform();
}
也是非異步版本(因為有些版本在這里報告異步和瀏覽器操作問題 ):
private dragAndDrop(element: WebElement, destination: WebElement) {
return browser.actions().mouseDown(element).perform()
.then(() => browser.actions().mouseMove(destination).perform())
.then(() => browser.actions().mouseUp(destination).perform());
}
但是,只要稍做更改,它就會崩潰。 另外,使用css選擇器.cdk-drop-list
可以找到目標。 希望它可以幫助某人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.