Selenium Webdriver |Функция DragAndDrop |Нет исключений, но код не работает - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь перетащить логотип в контейнер, не получая исключения.Я могу найти элементы, и тот же код перетаскивания работает нормально для другого сайта с другими элементами.Но не знаю, почему это не работает здесь.Может ли кто-нибудь помочь.

// Searching elements 

    driver.get(https://www.w3schools.com/html/tryit.asp?ilename=tryhtml5_draganddrop");
    driver.switchTo().frame(driver.findElement(By.name("iframeResult")));
    driver.manage().timeouts().implicitlyWait(10000, TimeUnit.MILLISECONDS);
    WebElement From = driver.findElement(By.id("drag1"));
    WebElement To = driver.findElement(By.id("div1"));

//Drag and Drop Action

    Actions builder = new Actions(driver);
    Action DragnDrop = builder.clickAndHold(From).moveToElement(To).release(To).build();
    DragnDrop.perform();

1 Ответ

0 голосов
/ 28 сентября 2018

Исходя из моего опыта по достижению более стабильных действий перетаскивания, мы перешли от реализации Actions к реализации javascript.Да, это может выглядеть как взлом, но постоянные ложные отрицательные результаты теста заставили нас измерить риск и использовать js impl.(Мы не создавали сценарий с нуля, просто применили несколько предложений, найденных в Интернете)

Вы можете использовать его для своего случая, добавив приведенный ниже код вместо используемых вами действий.

driver.executeScript("function dnd(elemDrag, elemDrop) {\n" +
                        "    var DELAY_INTERVAL_MS = 100;\n" +
                        "    var MAX_TRIES = 10;\n" +
                        "    var dragStartEvent;\n" +
                        "    if (!elemDrag || !elemDrop) {\n" +
                        "        return false;\n" +
                        "    }\n" +
                        "    function fireMouseEvent(type, elem, dataTransfer) {\n" +
                        "        var evt = document.createEvent('MouseEvents');\n" +
                        "        evt.initMouseEvent(type, true, true, window, 1, 1, 1, 0, 0, false, false, false, false, 0, elem);\n" +
                        "        if (/^dr/i.test(type)) {\n" +
                        "            evt.dataTransfer = dataTransfer || createNewDataTransfer();\n" +
                        "        }\n" +
                        "        elem.dispatchEvent(evt);\n" +
                        "        return evt;\n" +
                        "    }\n" +
                        "    function createNewDataTransfer() {\n" +
                        "        var data = {};\n" +
                        "        return {\n" +
                        "            clearData: function (key) {\n" +
                        "                if (key === undefined) {\n" +
                        "                    data = {};\n" +
                        "                } else {\n" +
                        "                    delete data[key];\n" +
                        "                }\n" +
                        "            },\n" +
                        "            getData: function (key) {\n" +
                        "                return data[key];\n" +
                        "            },\n" +
                        "            setData: function (key, value) {\n" +
                        "                data[key] = value;\n" +
                        "            },\n" +
                        "            setDragImage: function () {\n" +
                        "            },\n" +
                        "            dropEffect: 'none',\n" +
                        "            files: [],\n" +
                        "            items: [],\n" +
                        "            types: []\n" +
                        "        }\n" +
                        "    }\n" +
                        "    fireMouseEvent('mousedown', elemDrag);\n" +
                        "    dragStartEvent = fireMouseEvent('dragstart', elemDrag);\n" +
                        "    function dragover() {\n" +
                        "        fireMouseEvent('dragover', elemDrop, dragStartEvent.dataTransfer);\n" +
                        "    }\n" +
                        "    function drop() {\n" +
                        "        fireMouseEvent('drop', elemDrop, dragStartEvent.dataTransfer);\n" +
                        "        fireMouseEvent('mouseup', elemDrop);\n" +
                        "        fireMouseEvent('dragend', elemDrag);\n" +
                        "    }\n" +
                        "    setTimeout(dragover, DELAY_INTERVAL_MS);\n" +
                        "    setTimeout(drop, DELAY_INTERVAL_MS * 2);\n" +
                        "    return true;\n" +
                        "}\n" +
                        "   dnd(arguments[0], arguments[1])", From, To)

Источник: https://github.com/WileyLabs/teasy/blob/master/src/main/java/com/wiley/utils/JsActions.java

ps В ссылке из вашего вопроса есть опечатка.(вместо «asp? ilename » должно быть «asp? имя файла )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...