Перетаскивание не работает с Chrome WebDriver в Java - PullRequest
1 голос
/ 15 мая 2019

Введите описание изображения здесь У меня есть следующий код для перетаскивания элемента из одного местоположения в другое местоположение

By sourceLocatorDragAndDrop = By.cssSelector("#available_objects_parent tbody tr td:eq(4)");

By destinationLocatorDragAndDrop = By.cssSelector("#assigned_objects_parent table tbody");

Actions action = new Actions(webDriver);   

action.dragAndDrop(webDriver.findElement(sourceLocatorDragAndDrop) ,webDriver.findElement(destinationLocatorDragAndDrop)).build().perform();

Этот код выдает следующую ошибку:

org.openqa.selenium.InvalidSelectorException: неверный селектор: An указан неверный или недопустимый селектор (информация о сеансе: chrome = 74.0.3729.131) (информация о драйвере: chromedriver = 2.46.628402 (536cd7adbad73a3783fdc2cab92ab2ba7ec361e1), платформа = Windows NT 10.0.17134 x86_64) (ВНИМАНИЕ: сервер не предоставил никакой информации о трассировке стека)

Может кто-нибудь сказать, как решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 15 мая 2019

Вы также можете использовать JavaScript: -

Поскольку в HTML5 Action draganddrop функция не работает, я использую javascript, и она прекрасно работает для меня: -

    WebElement From = driver.findElement(By.id("sourceImage"));
    WebElement To = driver.findElement(By.id("targetDiv"));

    //HTML 5 
    final String java_script =
            "var src=arguments[0],tgt=arguments[1];var dataTransfer={dropEffe" +
            "ct:'',effectAllowed:'all',files:[],items:{},types:[],setData:fun" +
            "ction(format,data){this.items[format]=data;this.types.append(for" +
            "mat);},getData:function(format){return this.items[format];},clea" +
            "rData:function(format){}};var emit=function(event,target){var ev" +
            "t=document.createEvent('Event');evt.initEvent(event,true,false);" +
            "evt.dataTransfer=dataTransfer;target.dispatchEvent(evt);};emit('" +
            "dragstart',src);emit('dragenter',tgt);emit('dragover',tgt);emit(" +
            "'drop',tgt);emit('dragend',src);";

    ((JavascriptExecutor)driver).executeScript(java_script, From, To);

И использование Actions код ниже: -

WebElement From = driver.findElement(By.id("sourceImage"));
WebElement To = driver.findElement(By.id("targetDiv"));

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

Используйте Firefox IDE для поиска xpath.Для получения дополнительной информации перейдите по этой ссылке.

1 голос
/ 15 мая 2019

:eq() - это селектор JQuery, а не cssselector.Селен не признает это.Ближайшее совпадение - :nth-child()

By sourceLocatorDragAndDrop = By.cssSelector("#available_objects_parent tbody tr td:nth-child(4)");
1 голос
/ 15 мая 2019

Кажется, вы используете неправильный cssSelector. Вы всегда можете проверить xpath в опциях разработчика Chrome. Пожалуйста, перейдите по ссылке ниже. Пожалуйста, предоставьте HTML-код для sourceLocatorDragAndDrop и destinationLocatorDragAndDrop, чтобы мы могли понять, что пошло не так.

https://yizeng.me/2014/03/23/evaluate-and-validate-xpath-css-selectors-in-chrome-developer-tools/

...