Java-拖放不适用于selenium 3.8

Java-拖放不适用于selenium 3.8,java,selenium,selenium-webdriver,drag-and-drop,Java,Selenium,Selenium Webdriver,Drag And Drop,拖放操作不适用于selenium 3.8 这就是我尝试过的。但这只是选择元素。保持和下降并没有发生 WebElement source = driver.findElement(By.xpath("//tbody[@class ='lt-body']//tr[@data-test-id='table-row-id-20']//td[contains(@id,'ember')]//div[contains(@id,'ember')]//*[name()='svg']//*[name()='ell

拖放操作不适用于selenium 3.8

这就是我尝试过的。但这只是选择元素。保持和下降并没有发生

WebElement source = driver.findElement(By.xpath("//tbody[@class ='lt-body']//tr[@data-test-id='table-row-id-20']//td[contains(@id,'ember')]//div[contains(@id,'ember')]//*[name()='svg']//*[name()='ellipse']"));
WebElement destination = driver.findElement(By.xpath("//tbody[@class ='lt-body']//tr[@data-test-id='table-row-id-3']//td[contains(@id,'ember')]//div[contains(@id,'ember')]//*[name()='svg']//*[name()='ellipse']"));

Actions builder = new Actions(driver);
int x2 =destination.getLocation().getX();
int y2 = destination.getLocation().getY();
builder.clickAndHold(source);
builder.moveByOffset(x2,y2);
builder.moveToElement(destination);
builder.release();
builder.perform();
我也试过这个

builder.clickAndHold(source).moveByOffset(x2,y2).moveToElement(destination).release().build().perform();
也试过机器人。每次我只能看到源元素和目标元素都被选中。但不是拖拽


还尝试了dragAndDrop的ActionsChain。这也不起作用。

使用以下基于javascript的方法。如果给定两个元素,这是一种非常简洁的拖放方式。这几乎每次都有效。祝你好运

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);

    }

“拖放”应该有自己的actionchains方法。我只会使用它,而不是试图通过组合其他动作来获得相同的行为。看,请阅读为什么。考虑使用格式化的基于文本的相关HTML、代码试验和错误堆栈跟踪更新问题。@ SyType也尝试了。不工作。它只选择源和目标。但并没有发生拖拽,“用机器人试过”是什么意思?你是说robotframework.org上提供的工具,还是别的什么?你可以尝试一下,非常感谢,但是没有用。它甚至没有选择元素。只是想知道,您是否通过执行以下操作声明了“js”。公共静态JavascriptExecutor js;然后提供源和目标WebElement作为上述方法的参数。你能告诉我你是怎么做到的吗?嗨@Chuchoo我试过这个代码,但没能做到