鼠标拖动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等一定要准确,否则,到时候会出现各种拖动错乱的问题:
eg
1. 拖动元素如果用到action.dragAndDropBy (k2, -570 , 100 ).perform ()
2. 定位参考:
WebElement A=driver.findElement (By.xpath ("//*[contains(@x,'50')]" ))
//"任务跨1" 节点
WebElement B=driver.findElement (By.xpath ("//*[contains(@y,'150')]" ))
总结:
1.注意拖动之后属性的唯一性
2.dragAndDrop