zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【解决】client does not support authentication
    DesktopLayer.exe专杀
    SVN客户端操作(clean up|commit|update)系统找不到指定的文件
    怎样判断一个exe可执行程序(dll文件)是32位的还是64位的
    Windows 调用OpenProcess失败
    win10 请求操作需要提升解决方案
    LINUX下C++编程如何获得某进程的ID
    GitHub
    Git分支管理
    Gi命令行操作
  • 原文地址:https://www.cnblogs.com/soundcode/p/12505812.html
Copyright © 2011-2022 走看看