Нажмите и перетащите Selenium (Chrome WebDriver) не перетаскивает, но будет нажать и удерживать

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

Chrome WebDriver, Java / Selenium

public void clickAndDragListElement() {
    Actions hold = new Actions(driver);
    hold.clickAndHold(targetHoldElement)
        .moveToElement(targetDestinationElement)
        .release(targetHoldElement)
        .build()
        .perform();
}

(WebElements определены вне элемента)

4 ответа

Решение
new Actions(driver)
                .moveToElement(source)
                .pause(Duration.ofSeconds(1))
                .clickAndHold(source)
                .pause(Duration.ofSeconds(1))
                .moveByOffset(1, 0)
                .moveToElement(destination)
                .moveByOffset(1, 0)
                .pause(Duration.ofSeconds(1))
                .release().perform();

Ни одно из этих решений не сработало для меня. Предложение @Fenio кажется самой большой надеждой для моего варианта использования, но мне не повезло. Вместо этого я решил использовать селен, чтобы получить координаты элементов, а затем использовать pyautogui (который внутренне использует Xlib) для выполнения щелчков и движений мыши, пока безголовый веб-драйвер работает в режиме киоска. Это обходное решение сработало для меня.

(кстати, я использую селен для python)

Я попробовал это, и это прекрасно работает для меня:

public class DragAndDrop {

    public static void main(String[] args) {
         System.setProperty("webdriver.chrome.driver", "C:\\Users\\Ranosys\\workspace\\MyTest\\chromedriver.exe");
         WebDriver driver = new ChromeDriver();
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
          WebDriverWait wait=new WebDriverWait(driver,50 );

         driver.manage().window().maximize();
         driver.get("http://demo.guru99.com/test/drag_drop.html");
       //Element which needs to drag.           
        WebElement From=driver.findElement(By.xpath("//*[@id='credit2']/a"));   

      //Element on which need to drop.      
      WebElement To=driver.findElement(By.xpath("//*[@id='bank']/li"));                 

      //Using Action class for drag and drop.       
      Actions act=new Actions(driver);                  

    //Dragged and dropped.      
      act.dragAndDrop(From, To).build().perform();  


    }

}

Вы пробовали что-то вроде этого:

// Create object of actions class
Actions act=new Actions(driver);

// find element which we need to drag
WebElement drag=driver.findElement(By.xpath(".//*[@id='draggable']"));

// find element which we need to drop
WebElement drop=driver.findElement(By.xpath(".//*[@id='droppable']"));

// this will drag element to destination
act.dragAndDrop(drag, drop).build().perform();
Другие вопросы по тегам