`

Java 模拟鼠标操作实现 Html5 Drag And Drop

 
阅读更多

优点:无需获得Element,只需要两个坐标就可以进行操作

缺点:独占性强,强制获得鼠标,运行过程中无法进行其他操作,坐标是屏幕坐标,计算坐标需要减去浏览器工具栏和地址栏的高度

 

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.interactions.Actions;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.*;
public class DragAndDrop {
    static WebDriver driver;
    public static void main(String[] args) throws Exception {
     System.setProperty("webdriver.chrome.driver", "F:\\workspace\\chromedriver_win32\\chromedriver.exe");
     driver = new ChromeDriver();
       
     // driver.get("http://www.w3schools.com/html/html5_draganddrop.asp");
     // driver.get("http://www.w3schools.com/html/tryhtml5_draganddrop.htm");
        driver.get("http://html5demos.com/drag");
        driver.manage().window().maximize();
        WebElement dragFrom = driver.findElement(By.xpath("//*[@id='one']"));
        WebElement dragTo = driver.findElement(By.xpath("//*[@id='bin']"));
        dragAndDropElement(dragFrom, dragTo);
    }
    public static void dragAndDropElement(WebElement dragFrom, WebElement dragTo) throws Exception {
     // Setup robot
        Robot robot = new Robot();
        robot.setAutoDelay(500);
        // Get size of elements
        Dimension fromSize = dragFrom.getSize();
        Dimension toSize = dragTo.getSize();
        Point toLocation = dragTo.getLocation();
        Point fromLocation = dragFrom.getLocation();
        //Make Mouse coordinate centre of element
        toLocation.x += toSize.width/2;
        toLocation.y += toSize.height/2 + 50 ;
        fromLocation.x += fromSize.width/2;
        fromLocation.y += fromSize.height/2 + 50;
 
        //Move mouse to drag from location
        robot.mouseMove(fromLocation.x, fromLocation.y);
        //Click and drag
        robot.mousePress(InputEvent.BUTTON1_MASK);
       
        //Drag events require more than one movement to register
        //Just appearing at destination doesn't work so move halfway first
        robot.mouseMove(((toLocation.x - fromLocation.x) / 2) + fromLocation.x , ((toLocation.y - fromLocation.y) / 2) + fromLocation.y);
       
        //Move to final position
        robot.mouseMove(toLocation.x, toLocation.y);
        //Drop
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
    }
}

 

分享到:
评论
1 楼 dmwdmc 2015-02-01  

相关推荐

    Java自动化测试系列[v1.0.0][模拟鼠标]

    在Java自动化测试中,模拟鼠标的操作是必不可少的,特别是在Web应用测试中。这个Java类`MouseUtil`提供了多种模拟鼠标行为的方法,如左键单击、右键单击、双击、拖拽等,这些都是Selenium WebDriver库的一部分。下面...

    action源码java-Drag-And-Drop-Java-Selenium:在此存储库中,使用Actions类执行将源拖放到目标路径的代

    这个`Drag-And-Drop-Java-Selenium`项目提供了一个具体的示例,展示了如何使用Java来实现元素的拖放功能。在实际的Web应用测试中,拖放操作常常用于验证用户界面的交互性。 `Actions`类是Selenium WebDriver的一...

    dnd.beta

    ### Java中的拖放(Drag and Drop)功能实现 #### 一、引言 在Java 2平台之前,拖放(Drag and Drop, DnD)功能的支持并不完善,特别是与本地窗口系统的交互方面存在缺失。现代用户界面设计中,允许用户从文件选择器将...

    DragTreeTest

    JTree不仅支持基本的浏览操作,还支持拖放(Drag and Drop)功能,允许用户通过鼠标操作移动文件或目录,增强了用户体验。 在实现过程中,"DragTreeTest"首先需要构建树形数据模型。这个模型通常是一个...

    GWT 拖拽做象棋 (1). dnd 学习.

    在GWT中,DnD功能允许用户通过鼠标操作在界面上移动元素,模拟现实世界中的拖放行为,非常适合用于构建交互性强的应用,如棋类游戏。 首先,GWT是Google开发的一个开源框架,它允许Java开发者使用Java语言编写Web...

    Swing java

    Swing支持拖放(Drag and Drop)功能,使得用户可以通过简单的鼠标操作来移动和传输数据。此外,Swing还提供了JTable、JTree和JList等组件,用于创建复杂的表格、树形结构和列表视图,方便数据展示和操作。 Swing的...

    seleniumwebdriver

    - 例如: `new Actions(driver).dragAndDrop(source, target).build().perform();` #### 12. 等待页面元素加载 - **显式等待**: - 使用 `WebDriverWait` 配合 `ExpectedConditions` 等待特定条件成立。 - 例如: `...

    selenium webdriver

    - 使用 `drag_and_drop(source, target)` 方法。 #### 十一、定位一组元素 - **11.1 第一种定位方法**: - 使用 `find_elements_by_*` 方法找到多个元素。 - **11.2 第二种定位方法**: - 使用 `find_elements_by...

    Primefaces 参考资料

    - **Drag&Drop**: - **Draggable**:拖拽功能,使元素可以被拖动。 - **Droppable**:放置目标,指定哪些元素可以作为放置的目标。 - **Dock**:停靠栏组件,常用于导航菜单。 - **Editor**:富文本编辑器,支持...

    primefaces_users_guide_3_3.pdf

    - **Drag&Drop**: - **Draggable**:拖拽功能,允许用户移动元素。 - **Droppable**:放置功能,指定可以放置元素的区域。 - **Dock**:停靠栏,用于固定显示特定组件。 - **Editor**:富文本编辑器,支持复杂...

Global site tag (gtag.js) - Google Analytics