我编写了以下代码来移动https://jqueryui.com/draggable/上的可拖动对象
driver.get("https://jqueryui.com/draggable/");
WebElement eleFrame=driver.findElement(By.className("demo-frame"));
driver.switchTo().frame(eleFrame);
WebElement ele=driver.findElement(By.xpath("//*[@id='draggable']"));
Actions move=new Actions(driver);
move.dragAndDropBy(ele, 180, 300).release().build().perform();
此代码不会移动对象。
当我试着
move.clickAndHold(ele).moveByOffset(300, 100).release().build().perform();
它工作正常。我读到文件,它说dragAnddropBy具有与clickAndHold内部相同的功能,然后移动一些偏移量。
我之前已经测试了它的垂直/水平滑块,它曾经工作得很好。
请指出dragAndDropBy代码有什么问题。或其他一些功能实际上是预期的。
任何帮助都感激不尽。
实际上,move.clickAndHold(ele).moveByOffset(300, 100).release().build().perform();
为你工作很奇怪......我已经尝试过它们并且它们抛出相同的异常:
org.openqa.selenium.UnsupportedCommandException: moveto did not match a known command
但是,在这个问题上有open bugs in Selelnium和geckodriver。
顺便说一下,两者之间的唯一区别是你的自定义动作中没有ButtonReleaseAction
。
您可以使用dragAndDrop()方法。
Actions action = new Actions(driver);
action.dragAndDrop(sourceElement, destinationElement).build().perform();
请参阅http://www.seleniumeasy.com/selenium-tutorials/drag-and-drop-using-webdriver-action-class教程
无需release()使用“dragAndDropBy”时。试试这个:move.dragAndDropBy(ele,180,300).build()。perform();
多个控件拖放到同一目标。
WebElement element_1 = driver.findElement(By.xpath("//li[@data-lobid='12']")); //source element 1
WebElement element_2 = driver.findElement(By.xpath("//li[@data-lobid='21']")); //source element 2
WebElement destination = driver.findElement(By.xpath(".//*[@id='lobModalPopUp']/div")); //destination path
int[] array_source = new int[]{12,21}; // create fixed array for id number of source element 1 and 2
for(int i = 0; i<array_source.length; i++) //Passing id number of source element 1 and 2 inside the for loop.
{
WebElement all_source_element = driver.findElement(By.xpath("//li[@data-lobid='"+arraylobs[i]+"']")); // getting all source element with the help of fixed array.
Actions drag = new Actions(driver);
drag.clickAndHold(all_source_element).build().perform();
Thread.sleep(3500);
drag.clickAndHold().moveToElement(destination).release(destination).build().perform();
Thread.sleep(3500);
}
driver.get("https://jqueryui.com/draggable/");
driver.switchTo().frame(0);
WebElement dragMe = driver.findElement(By.cssSelector(".ui-draggable-handle"));
new Actions(driver).dragAndDropBy(dragMe, dragMe.getLocation().getX()+100, dragMe.getLocation().getY()+100).perform();
这是如何使用Actions类中提供的dragAndDropBy(WebElement source,int xOffset,int yOffset)方法来执行拖放操作。
在使用此代码块之前,请确保正确设置驱动程序。