zoukankan      html  css  js  c++  java
  • 【java+selenium3】Actions模拟鼠标 (十一)

    一、鼠标操作

      WebElement的click()方法可实现元素的点击操作,但是没有提供鼠标的右击/双击/悬停/鼠标拖动等操作.这些操作需要通过Action类提供的方法来实现!

    Action常用的api如下:

    1. contextClick() 右击

    2. clickAndHold() 鼠标悬停

    3. move_to_element() 鼠标悬停

    4. doubleClick() 双击

    5. dragAndDrop() 拖动

    6. release() 释放鼠标

    7. perform() 执行所有Action中的存储行为

    例如:演示模拟验证码点击拖动场景示例如下:

    二、代码准备

     1.前端HTML代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>滑动条</title>
        <link rel="stylesheet" href="drag.css">
        <script src="jquery-1.7.1.min.js"></script>
        <script src="drag.js"></script>
        <style type="text/css">
            .slidetounlock{
                font-size: 12px;
                background:-webkit-gradient(linear,left top,right top,color-stop(0,#4d4d4d),color-stop(.4,#4d4d4d),color-stop(.5,#fff),color-stop(.6,#4d4d4d),color-stop(1,#4d4d4d));
                -webkit-background-clip:text;
                -webkit-text-fill-color:transparent;
                -webkit-animation:slidetounlock 3s infinite;
                -webkit-text-size-adjust:none
            }
            @-webkit-keyframes slidetounlock{0%{background-position:-200px 0} 100%{background-position:200px 0}}
    
        </style>
    </head>
    <body>
    <div id="wrapper" style="position: relative;top: 300px;left:300px;">
        <div id="drag">
            <div class="drag_bg"></div>
            <div class="drag_text slidetounlock" onselectstart="return false;" unselectable="on">
                请按住滑块,拖动到最右边
            </div>
            <div class="handler handler_bg"></div>
        </div>
    </div>
    
        <!--<a href="#" class="img"><img src="img/Lighthouse.jpg"/></a>-->
    <script>
        $('#drag').drag();
    </script>
    </body>
    </html>

    2.HTML滑块CSS样式

    #drag{
        position: relative;
        background-color: #e8e8e8;
        width: 300px;
        height: 34px;
        line-height: 34px;
        text-align: center;
    }
    #drag .handler{
        position: absolute;
        top: 0px;
        left: 0px;
        width: 40px;
        height: 32px;
        border: 1px solid #ccc;
        cursor: move;
    }
    .handler_bg{
        background: #fff url("../img/slider.png") no-repeat center;
    }
    .handler_ok_bg{
        background: #fff url("../img/complet.png") no-repeat center;
    }
    #drag .drag_bg{
        background-color: #7ac23c;
        height: 34px;
        width: 0px;
    }
    #drag .drag_text{
        position: absolute;
        top: 0px;
        width: 300px;
        color:#9c9c9c;
        -moz-user-select: none;
        -webkit-user-select: none;
        user-select: none;
        -o-user-select:none;
        -ms-user-select:none;
    
        font-size: 12px;        //  add
    }

    3.滑块拖拽JS

    $.fn.drag = function(options) {
        var x, drag = this, isMove = false, defaults = {
        };
        var options = $.extend(defaults, options);
        var handler = drag.find('.handler');
        var drag_bg = drag.find('.drag_bg');
        var text = drag.find('.drag_text');
        var maxWidth = drag.width() - handler.width();  //能滑动的最大间距
    
        //鼠标按下时候的x轴的位置
        handler.mousedown(function(e) {
            isMove = true;
            x = e.pageX - parseInt(handler.css('left'), 10);
        });
    
        //鼠标指针在上下文移动时,移动距离大于0小于最大间距,滑块x轴位置等于鼠标移动距离
        $(document).mousemove(function(e) {
            var _x = e.pageX - x;// _x = e.pageX - (e.pageX - parseInt(handler.css('left'), 10)) = x
            if (isMove) {
                if (_x > 0 && _x <= maxWidth) {
                    handler.css({'left': _x});
                    drag_bg.css({'width': _x});
                } else if (_x > maxWidth) {  //鼠标指针移动距离达到最大时清空事件
                    dragOk();
                }
            }
        }).mouseup(function(e) {
            isMove = false;
            var _x = e.pageX - x;
            if (_x < maxWidth) { //鼠标松开时,如果没有达到最大距离位置,滑块就返回初始位置
                handler.css({'left': 0});
                drag_bg.css({'width': 0});
            }
        });
    
        //清空事件
        function dragOk() {
            handler.removeClass('handler_bg').addClass('handler_ok_bg');
            text.removeClass('slidetounlock').text('验证通过').css({'color':'#fff'});       //modify
           // drag.css({'color': '#fff !important'});
    
            handler.css({'left': maxWidth});                   // add
            drag_bg.css({'width': maxWidth});                  // add
    
            handler.unbind('mousedown');
            $(document).unbind('mousemove');
            $(document).unbind('mouseup');
    
        }
    };

    滑块拖动实现代码参考博文:https://blog.csdn.net/shuai_wy/article/details/62419257

    4.jquery-1.7.1.min.js下载链接:http://www.jqueryfuns.com/resource/2169

    三、自动化代码实现

    @Test
    public void test() throws InterruptedException {
        try {
            driver.get("file:///C:/Users/Administrator/Desktop/test/MouseDrag/identifying_code.html");
            driver.manage().window().maximize();
            Actions actions = new Actions(driver);
            WebElement targetElement = driver.findElement(By.xpath("//*[@id="drag"]/div[3]"));
            int x = targetElement.getLocation().getX();
            int y = targetElement.getLocation().getY();
            Thread.sleep(3000);
            //首先定位到方块并点击=》移动到目标位置=》松开释放鼠标=》perform执行Actions的一系列方法调用
            actions.clickAndHold(targetElement).moveToElement(targetElement, x+260, y).release().perform();
            Thread.sleep(3000);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    学习后总结,不足之处后续补充!

    未完待续。。。

  • 相关阅读:
    Beta阶段代码规范与计划
    Alpha总结展望——前事不忘后事之师
    Alpha冲刺成果测试
    Alpha冲刺总结
    码到成功——Beta冲刺随笔 day 5
    码到成功——Beta冲刺随笔 day 4
    码到成功——Beta冲刺随笔 day 3
    码到成功——Beta冲刺随笔 day 2
    码到成功——Beta冲刺随笔 day 1
    项目Beta冲刺(团队)——凡事预则立
  • 原文地址:https://www.cnblogs.com/xiaozhaoboke/p/11136159.html
Copyright © 2011-2022 走看看