我使用下面的代码进行拖放。它适用于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();
请帮忙!
答案 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();