簡體   English   中英

在Java中使用Selenium WebDriver拖放層次結構列表

[英]Drag & drop hierarchical list using selenium webdriver in java

在Java中使用Selenium WebDriver拖放層次結構列表

Github link: https://github.com/dbushell/Nestable

Demo link:- http://dbushell.github.io/Nestable/

我想在Java中使用Selenium Webdriver拖放層次結構列表。 有關更多詳細信息,請參見演示鏈接。

我嘗試了以下操作:

  1. 獲取源元素
  2. 用class = dd-placeholder創建一個div
  3. 拖動源元素並放到新創建的div元素上

錯誤:無法將源元素拖放到新創建的div元素上。

我該怎么做。 是否可以使用Selenium WebDriver。

Note: See demo link

我發現拖放功能會有所不同,具體取決於您使用的瀏覽器,並且我不得不在放置位置添加偏移量,以使其能夠在Chrome Firefox和IE中始終運行。

這是一個C#代碼段,但Java應該類似。 就像您的方法一樣,本例中的目標是我在JS中插入的占位符div

Actions act = new Actions(WebDriver);
act.ClickAndHold(source);
act.MoveToElement(target);
act.MoveByOffset(0, 5); //Minimum 1 pixel offset for Chrome, 5 for IE 
act.Release(source);
act.Build().Perform();

此方法使用Javascript將一個Web元素從一個位置拖放到另一個位置。 不要被它的javascript所困擾:)。 只需通過提供from和to參數來使用該方法。 祝好運!

public void dragAndDrop(WebElement from, WebElement to) {
    js.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, destination) {\n"
            + "var dragStartEvent =createEvent('dragstart');\n" + "dispatchEvent(element, dragStartEvent);\n"
            + "var dropEvent = createEvent('drop');\n"
            + "dispatchEvent(destination, dropEvent,dragStartEvent.dataTransfer);\n"
            + "var dragEndEvent = createEvent('dragend');\n"
            + "dispatchEvent(element, dragEndEvent,dropEvent.dataTransfer);\n" + "}\n" + "\n"
            + "var source = arguments[0];\n" + "var destination = arguments[1];\n"
            + "simulateHTML5DragAndDrop(source,destination);", from, to);

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM