Drag & Drop Selenium WebDriver + java

124
13 марта 2018, 02:17

Пробовал следующее:

Actions builder = new Actions(driver);
builder.keyDown(Keys.CONTROL)
   .click(someElement)
   .click(someOtherElement)
   .keyUp(Keys.CONTROL);
Action selectMultiple = builder.build();
selectMultiple.perform(); 

и

Actions builder = new Actions(driver);
Action dragAndDrop = builder.clickAndHold(someElement)
   .moveToElement(otherElement)
   .release(otherElement)
   .build();
dragAndDrop.perform();

а так же

WebElement element = driver.findElement(By.name("source")); 
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();

Смещать мышь по осям на (1, 1) так же пробовал. Ничего из этого не помогло. ChromeDriver вообще поддерживает это действие? Если да, то может есть варианты как это еще можно реализовать?

Answer 1

возможно, какие-то проблемы с браузером или драйвером...

Попробуем решить данную задачу через JavaScript

function createEvent(typeOfEvent) {
    var event = document.createEvent("CustomEvent");
    event.initCustomEvent(typeOfEvent, true, true, null);
    event.dataTransfer = {
        data: {},
        setData: function (key, value) {
            this.data[key] = value;
        },
        getData: function (key) {
            return this.data[key];
        }
    };
    return event;
}
function dispatchEvent(element, event, transferData) {
    if (transferData !== undefined) {
        event.dataTransfer = transferData;
    }
    if (element.dispatchEvent) {
        element.dispatchEvent(event);
    } else if (element.fireEvent) {
        element.fireEvent("on" + event.type, event);
    }
}
function simulateHTML5DragAndDrop(element, target) {
    var dragStartEvent = createEvent('dragstart');
    dispatchEvent(element, dragStartEvent);
    var dropEvent = createEvent('drop');
    dispatchEvent(target, dropEvent, dragStartEvent.dataTransfer);
    var dragEndEvent = createEvent('dragend');
    dispatchEvent(element, dragEndEvent, dropEvent.dataTransfer);
}

Дальше нужно вызвать метод simulateHTML5DragAndDrop

((JavascriptExecutor) driver).executeScript(scriptOnTop + "simulateHTML5DragAndDrop(arguments[0], arguments[1])", source, target);
READ ALSO
Ошибка при скачивании в sardine java

Ошибка при скачивании в sardine java

Получаю ошибку при скачивании файлов с некоторыми расширениямиЕсли скачиваю файл с расширением txt, xlsx или zip - ошибок нету

149
Как вывести несколько значений сразу в popup окне

Как вывести несколько значений сразу в popup окне

ЗдравствуйтеЕсть код в котором при выборе чекбокса, его значение выводиться в popup окне

209
Функция .wrap ломается при подгрузке постов

Функция .wrap ломается при подгрузке постов

Всем приветНа сайте используется js-функция

199
показать полосу загрузки пользователю

показать полосу загрузки пользователю

в контроллере производится следующая задача:

147