Java Selenium Actions模拟鼠标拖动dragAndDrop总结
鼠标拖动API
Actions action = new Actions(webdriver);
##source-要拖动的元素A,target-拖动元素A到达的目标元素
action.dragAndDrop(source, target);
##source-要拖动的元素A,拖动元素移动多少,标准以元素A左上角为准,拖动元素相对元素A移到右边是x是正值,左边是负值,拖动元素相对元素A移到上边是y是负值,下边是正值,
action.dragAndDropBy(source, xOffset, yOffset);
eg:
//找到我们所要拖动的元素A
WebElement A = driver.findElement(By.xpath("//*[@id=\"ext-gen153\"]/li[1]/div"));
WebElement B=driver.findElement(By.xpath("//*[@id=\"ext-gen153\"]/li[2]/div"));
Actions action = new Actions(driver.getDriver());
//鼠标拖动A向左移动530,之后释放鼠标
action.dragAndDropBy(A, -570, 0).perform();
// 鼠标拖动B向下移动100,向左移动570之后释放鼠标
action.dragAndDropBy(k2, -570, 100).perform();
##注意:拖动元素之间最好加强制休眠时间,否则不定时出问题,也不报错,有你哭的
action.dragAndDrop(A, B).perform();
driver.sleep(2000);
action.dragAndDrop(B, A).perform();
有时定位没问题,代码没问题,就是没效果,那就考虑一下拖拽在不同的浏览器的工作效果
For firefox :
Actions builder = new Actions(driver);
builder.moveToElement(draggable).clickAndHold();
builder.moveToElement(target).click().perform();
For chrome :
Actions builder = new Actions(driver);
builder.moveToElement(draggable).clickAndHold(draggable);
builder.moveToElement(target).release(target).perform();
重中之重:
拖动元素有一个最重要的前提是,你定位的xpath等一定要准确,否则,到时候会出现各种拖动错乱的问题:
1
eg
1.拖动元素如果用到action.dragAndDropBy(k2, -570, 100).perform();比如,如果我们想把A元素(可能为图标)拖动到B区域可能用到这个方法,但是把A拖动到B区域之后,如果我们又想把此时的A拖动到其它地方,但是此时A没有id,class,只有一些看似没用的x,y,w,h,注意:这里一定要注意这里的这四个值,因为当我们刚开始调用action.dragAndDropBy(k2, -570, 100).perform();时,此时拖动完之后,那么绝对此时的x或者y或者w或者h一定是唯一值,那么我们抓住这个要点就可以定位了
2.定位参考:
WebElement A=driver.findElement(By.xpath("//*[contains(@x,'50')]"));
//"任务跨1"节点
WebElement B=driver.findElement(By.xpath("//*[contains(@y,'150')]"));
总结:
1.注意拖动之后属性的唯一性
2.dragAndDrop