Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium webdriver-在角度/材质设计网站上拖放_Java_Angular_Selenium_Selenium Webdriver_Angular Material - Fatal编程技术网

Java Selenium webdriver-在角度/材质设计网站上拖放

Java Selenium webdriver-在角度/材质设计网站上拖放,java,angular,selenium,selenium-webdriver,angular-material,Java,Angular,Selenium,Selenium Webdriver,Angular Material,我尝试使用selenium java webdriver自动化拖放事件,针对使用角度/材质设计创建的网站,我尝试了无数种方法,但每一种方法都失败了,没有错误,但没有任何东西被拖放 以下是我的示例代码: 用于测试的网站是: 如您所见,我使用了两个选项,第一个使用Selenium的Actions类,第二个执行JavaScript来执行拖放,但没有任何效果 有什么办法可以让它发挥作用吗?谢谢这里有一个“困难”但可能的解决方法: 如果这甚至没有帮助,最坏的情况是Sikuli 注意:它与浏览器窗口交互。

我尝试使用selenium java webdriver自动化拖放事件,针对使用角度/材质设计创建的网站,我尝试了无数种方法,但每一种方法都失败了,没有错误,但没有任何东西被拖放

以下是我的示例代码:

用于测试的网站是:

如您所见,我使用了两个选项,第一个使用Selenium的Actions类,第二个执行JavaScript来执行拖放,但没有任何效果


有什么办法可以让它发挥作用吗?谢谢

这里有一个“困难”但可能的解决方法:

如果这甚至没有帮助,最坏的情况是Sikuli


注意:它与浏览器窗口交互。

Hi@SiKing,正如您所见,我提供了外部链接,不仅仅是为了复制粘贴代码。在大多数情况下,代码被视为最佳答案或类似的内容。此外,还有一个额外的解决方案。如何将其标记为重复将解决他的问题?谢谢
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class Playground
{
    public static void main(String[] args)
    {
        WebDriver driver = new ChromeDriver();
        driver.get("https://smnbbrv.github.io/angular-sortablejs-demo/multiple-lists");

        WebElement draggable = driver.findElement(By.xpath("/html/body/app-root/div/app-multiple-lists/div[1]/div[1]/ul/li[2]"));
        WebElement dropable = driver.findElement(By.xpath("/html/body/app-root/div/app-multiple-lists/div[1]/div[2]"));

        // DRAW BORDERS AROUND TO MAKE SURE WE SELECT CORRECT OBJECTS
        drawBorder(driver, "/html/body/app-root/div/app-multiple-lists/div[1]/div[1]/ul/li[2]");
        drawBorder(driver, "/html/body/app-root/div/app-multiple-lists/div[1]/div[2]");

        // TRY USING SELENIUMS ACTION CLASS
        Actions actions = new Actions(driver);
        actions.clickAndHold(draggable).moveToElement(dropable).release().build().perform();

        // TRY AGAIN USING JAVA SCRIPT 
        dragAndDrop(driver, draggable, dropable);
    }

    public static void drawBorder(WebDriver driver, String xpath)
    {
        WebElement element_node = driver.findElement(By.xpath(xpath));
        JavascriptExecutor jse = (JavascriptExecutor) driver;
        jse.executeScript("arguments[0].style.border='3px solid red'", element_node);
    }

    public static void dragAndDrop(WebDriver driver, WebElement from, WebElement to)
    {
        JavascriptExecutor js = (JavascriptExecutor) driver;

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