2013-12-12 92 views
2

我使用下面的代码进行拖放。它在Firefoxdriver中工作,但不在chromedriver中。Selenium Webdriver拖放不在Chrome中工作

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

请帮忙!

+0

什么样的元素是什么?它是否可以排序? – Stas

回答

0

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

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的工作?

+0

我尝试将所有单独的动作捆绑为一个单独的动作。仍然没有工作。它现在甚至在Firefox中也不起作用。我已经放了2秒钟等待,而我正在测试硒脚本。即使没有等待2秒钟,它也能正常工作。 –

1

你有源和目标的ID,然后你为什么不尝试使用拖放..

却不是因优秀的程序员使用Java,所以我的代码是在python..Hope它可能会帮助UA位

actionChains = ActionChains(driver) 
actionChains.drag_and_drop(dragElement, dropElement).perform() 
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(); 
1

尝试下面的示例代码chromedriver:2.15,镀铬: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();