Selenium Webdriver拖放不在Chrome中工作

时间:2013-12-12 09:15:19

标签: selenium-webdriver

我使用下面的代码进行拖放。它适用于Firefoxdriver,但不适用于chromedriver。

WebElement dragElement = driver.findElement(By.id(dragid1));  
WebElement dropElement = driver.findElement(By.id(dropid1));    

Actions builder = new Actions(driver);  
Action drag = builder.clickAndHold(dragElement).build();
drag.perform();

Action move = builder.moveByOffset(355, -20).build();  
move.perform();  
TimeUnit.SECONDS.sleep(2);  
Actions release = builder.clickAndHold(dropElement).release();  
release.perform();   

请帮忙!

4 个答案:

答案 0 :(得分:1)

您既有源ID又有目标​​ID,那么为什么不尝试使用拖放...

我不是Java的优秀程序员所以我的代码是在python中...希望它可能对你有所帮助

actionChains = ActionChains(driver)
actionChains.drag_and_drop(dragElement, dropElement).perform()

答案 1 :(得分:1)

尝试下面的示例代码使用chromedriver:2.15,chrome:v43并且可以正常使用Chrome。

示例代码:

    System.setProperty("webdriver.chrome.driver","drivers/chromedriver.exe");
    WebDriver  driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(1,TimeUnit.MINUTES);
    driver.get("http://jqueryui.com/droppable");

    driver.switchTo().frame(0);
    WebElement dragElement = driver.findElement(By.id("draggable"));
    WebElement dropElement = driver.findElement(By.id("droppable"));
    Actions builder = new Actions(driver);
    builder.clickAndHold(dragElement).moveToElement(dropElement).release().build().perform();

答案 2 :(得分:0)

尝试将所有这些单独的Action对象捆绑到一个Actions对象

Actions act = new Actions(driver);
act.ClickAndHold(dragElement );
act.MoveToElement(dropElement );
act.Release(dragElement );
act.Build().Perform();

注意:对我而言,Chrome和& IE,有时只是拖动到一个元素是不足以使它坚持在那里,我将不得不添加额外的act.MoveByOffset(0, 5);之前释放移动几个像素,这似乎工作

你有没有理由在发布之前等待2秒,或者那只是在FF中有效?

答案 3 :(得分:0)

我有同样的问题但是必须像这样覆盖它:

        //Setup robot
        Robot robot = new Robot();
        robot.setAutoDelay(50);

        //Maximized browser:
        robot.keyPress(KeyEvent.VK_F11);
        Thread.sleep(2000);
        WebElement dragElement = driver.findElement(drag_element);
        Actions builder = new Actions(driver);
        builder.dragAndDropBy(dragElement,0, 200).build().perform();