Actions.dragAndDropBy未按预期工作

问题描述 投票:3回答:5

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

任何帮助都感激不尽。

java selenium selenium-webdriver selenium-chromedriver
5个回答
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


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教程


0
投票

无需release()使用“dragAndDropBy”时。试试这个:move.dragAndDropBy(ele,180,300).build()。perform();


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);
}   

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 source,int xOffset,int yOffset)方法来执行拖放操作。

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

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.