Невозможно перетащить с помощью Java Selenium WebDriver

#java #selenium-webdriver

#java #selenium-webdriver

Вопрос:

Ниже приведен HTML для исходного элемента:

 <li draggable-effect-allowed="copy" draggable-data="business.domain.view.RecordViewComponentType" draggable="view-designer-drop-zone-content" class="list-group-item ng-scope ng-binding" ng-dblclick="insertComponentType(component)" ng-repeat="component in componentTypes" draggable="true">Record</li>
  

и ниже приведен HTML для целевого элемента:

 <div droppable-on-drop="onDropComponent($event, $draggableEl, $droppableEl)" droppable="view-designer-drop-zone-content" class="layoutSection ContentAreaLayoutSection" id="CONTENT"></div>
  

Следовательно, я:

 source = driver.findElement(By.xpath("//li[text()='Record']"));
target = driver.findElement(By.ID("CONTENT"));

Actions action = new Actions(driver);
  

Для достижения перетаскивания я попытался использовать следующие API, но безуспешно:

 1. action.dragAndDrop(source, target).build().perform();
2. action.clickAndHold(source).moveToElement(target).release(target).build().perform();
3. action.moveToElement(source).clickAndHold(source).moveToElement(target).release(target).build().perform();
4. action.moveToElement(source).clickAndHold().moveToElement(target).release().build().perform();
5. action.clickAndHold(source).moveToElement(target).build().perform();
   Thread.sleep(3000);
   action.release(target).build().perform();
  

Я также пробовал с moveToElement(target, x-offset, y-offset) , но все равно не сработало.

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

На самом деле, я ожидал некоторой ошибки здесь, если есть проблема с совместимостью Selenium WebDriver и версии браузера.

Если кто-то знает решение или обходной путь для этого, пожалуйста, ответьте.

Ответ №1:

Приведенный ниже код работает для меня, попробуйте это:

  Actions act = new Actions(driver);
                    WebElement srcElement = driver.findElement(By
                            .id(locator)); 
                    Thread.sleep(3000);
                    WebElement targetElement =driver.findElement(By
                            .id(locator));
                    Thread.sleep(3000);
                    act.dragAndDrop(srcElement, targetElement);
                    Thread.sleep(3000);
                    act.build().perform();
                    Thread.sleep(3000);