我写了下面一段代码来移动一个可拖动的对象 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();
它工作正常。我读了documnets,它说dragAndropBy具有与clickAndHold内部相同的功能,然后移动一些偏移量。
我之前已经测试了它的垂直/水平滑块,它曾经工作正常。
请告知dragAndDropBy代码有什么问题。或其他一些功能实际上是预期的。
任何帮助将不胜感激。
答案 0 :(得分:0)
实际上,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
。
答案 1 :(得分:0)
您可以使用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
答案 2 :(得分:0)
无需释放()当" dragAndDropBy"用来。 试试这个: move.dragAndDropBy(ele,180,300).build()。perform();
答案 3 :(得分:0)
多个控件拖放到同一目的地。
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);
}
答案 4 :(得分:0)
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源,int xOffset,int yOffset)方法执行拖放操作的方法。
在使用此代码块之前,请确保正确设置驱动程序。