我试图使用操作类简单地将元素拖放到特定区域,但在我尝试的解决方案中,元素似乎总是被拖放到我真正的鼠标光标所在的位置,如本例所示:
元素甚至从浏览器中删除
这是我的代码:
WebElement card = driver.findElement(By.xpath("//div[@class='item']"));
WebElement container = driver.findElement(By.xpath("//h2[@class='text-center']"));
Actions move = new Actions(driver);
Action dragAndDrop = move.clickAndHold(card)
.release(container)
.build();
dragAndDrop.perform();
我已经检查了页面上是否有任何框架,但没有,我试图提供确切的位置,但最后的问题仍然是一样的,删除是在我的光标所在的地方完成的。
附言:这是我找到拖放区的代码部分,以更清晰:
要拖动的对象
我需要放下的区域
我终于发现,通过使用robot类并进行一些调整,我可以解决这个问题:
WebElement container = driver.findElement(By.xpath("//h2[@class='text-
center']"));
Point coordinates2 = container.getLocation();
WebElement card =
driver.findElement(By.xpath("//div[text()='"+priority+"']"));
Point coordinates = card.getLocation();
Robot robot = new Robot();
//drag
robot.mouseMove(coordinates.getX() +100, coordinates.getY() + 150);
Thread.sleep(1000);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
Thread.sleep(100);
//drop
robot.mouseMove(coordinates2.getX() + 400, coordinates2.getY() +300);
Thread.sleep(100);
robot.mouseMove(coordinates2.getX() + 401, coordinates2.getY() +301);
Thread.sleep(100);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
Thread.sleep(100);
";线程睡眠";只是在那里查看操作并在需要时帮助调试。那么,为什么我在掉落开始时移动两次,只是因为我看到,如果我在释放前不进行第二次移动,卡片将不会出现,也不会正确掉落,就像需要额外的动作来完成最后一个动作一样。