Actions.dragAndDropBy未按预期工作

时间:2016-12-13 05:56:47

标签: java selenium selenium-webdriver selenium-chromedriver

我写了下面一段代码来移动一个可拖动的对象  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代码有什么问题。或其他一些功能实际上是预期的。

任何帮助将不胜感激。

5 个答案:

答案 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 Selelniumgeckodriver

顺便说一句,两者之间的唯一区别是您的自定义操作中没有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)方法执行拖放操作的方法。

  • WebElement来源:您要拖动的网络元素。
  • int xOffset和int yOffset是将来的x轴和y轴坐标位置。基本上,代码会获取当前的x轴和y轴坐标位置,并添加int编号以移动可拖动元素。

在使用此代码块之前,请确保正确设置驱动程序。