11.2 Actions类介绍

作者: 博客已迁移I米阳 | 来源:发表于2018-06-25 09:01 被阅读35次

    我们已经学过了单击click() 方法,但这还不够,我们实际工作中通过鼠标除了单击外,我们还会用到右键,双击,拖拽等等,也可能需要用到键盘操作,那这些操作WebDriver的Actions类都支持。


    在某元素上鼠标右键和双击

    右键:contextClick().perform()
    双击:doubleClick().perform()
    

    两个方法如果传入WebElement参数,则在元素上右键或者双击,如果不传入任何参数,则在鼠标当前位置右键和双击。

    代码示例:

        @Test
        public void keyTest() throws InterruptedException {
            driver.get("http://www.baidu.com");
            WebElement ele = driver.findElement(By.id("su"));
            Actions action = new Actions(driver);
            // 在元素上右键
            action.contextClick(ele).perform();
            Thread.sleep(3000);
            //  在上双击
            action.doubleClick(ele).perform();
        }
    

    鼠标移动到某个元素上

    moveToElement(element).perform()
    

    代码示例:

        @Test
        public void moveTest(){
            driver.get("http://www.qq.com/");
            WebElement ele = driver.findElement(By.className("searchSelected"));
            Actions action = new Actions(driver);
            // 鼠标移动到某个元素上
            action.moveToElement(ele).perform();
        }
    

    把元素拖动到(x,y)上

    dragAndDropBy(WebElement,x,y).perform()
    

    该方法传入三个参数,第一个是WebElement,第二个是x轴坐标,第三个是y轴坐标。

    代码示例:

        @Test
        public void dragTest(){
            driver.get("file:///D:/html/dragAndDrop.html");
            WebElement ele = driver.findElement(By.id("drag"));
            Actions action = new Actions(driver);
            // 拖动某个元素到某个坐标
            action.dragAndDropBy(ele,500,500).perform();
        }
    

    把元素拖动到另一个元素上

     clickAndHold(ele1).moveToElement(ele2).release(ele1).perform()
    

    clickAndHold(ele1)按住元素1,moveToElement(ele2)移动到元素2,release(ele1)再释放元素1.

    代码示例:

        @Test
        public void dragTest1(){
            driver.get("file:///D:/html/dragAndDrop.html");
            WebElement ele1 = driver.findElement(By.id("drag"));
            WebElement ele2 = driver.findElement(By.xpath("html/body/h1"));
            Actions action = new Actions(driver);
            // 在元素1上按住,然后拖动到元素2在释放
            action.clickAndHold(ele1).moveToElement(ele2).release(ele1).perform();
        }
    

    模拟键盘操作

    按住某个按键:keyDown()
    松开某个按键:keyUp()
    

    两个方法均传入Keys类型参数。注意的是Actions类提供的模拟键盘操作,只能模拟键盘键盘四周的按键,也就是无法模拟字母按键,如果需要模拟字母按键的操作可以结合Java的Robot类来实现。

    代码示例:

        @Test
        public void selectedTest() throws InterruptedException {
            driver.get("file:///D:/html/index.html");
    //        定位下拉框
            WebElement selected = driver.findElement(By.id("selectWithMultipleEqualsMultiple"));
    //        定位下拉框中的选项
            java.util.List<WebElement> eles = selected.findElements(By.tagName("option"));
            Actions action = new Actions(driver);
            Thread.sleep(3000);
            // 按住 shift ,鼠标点击元素1和元素2
            action.keyDown(Keys.SHIFT).click(eles.get(1)).click(eles.get(2)).perform();
        }
    

    Robot 类示例:

        @Test
        public void robotTest() throws AWTException, InterruptedException {
            Robot robot = new Robot();
            driver.get("file:///D:/html/index.html");
            // 按住 Ctrl + S
            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.keyPress(KeyEvent.VK_S);
            Thread.sleep(3000);
            // 释放 Ctrl + S
            robot.keyRelease(KeyEvent.VK_CONTROL);
            robot.keyRelease(KeyEvent.VK_S);
        }
    

    keyPress() 按住某个按键
    keyRelease() 松开某个按键

    如果文章对您有帮助,请赞赏支持!


    欢迎关注个人公众号:


    个人公众号

    相关文章

      网友评论

        本文标题:11.2 Actions类介绍

        本文链接:https://www.haomeiwen.com/subject/iwihyxtx.html