《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)

简介: 【4月更文挑战第23天】本文介绍了网页中的滑动验证码的实现原理和自动化测试方法。作者首先提到了网站的反爬虫机制,并表示在本地创建一个没有该机制的网页,然后使用谷歌浏览器进行验证。接着,文章详细讲解了如何使用WebElement的click()方法以及Action类提供的API来模拟鼠标的各种操作,如右击、双击、悬停和拖动。

1.简介

  上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,于是写了这一篇文章,另外也是相对前边做一个简单的总结分享给小伙伴们或者童鞋们。废话不多数,直接进入今天的主题。

2.鼠标操作

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

2.1Action常用的API

Action常用的API如下:

1. contextClick() 右击

2. clickAndHold() 鼠标悬停

3. move_to_element() 鼠标悬停

4. doubleClick() 双击

5. dragAndDrop() 拖动

6. release() 释放鼠标

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

2.2演示模拟验证码点击拖动场景

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

3.代码准备

3.1前端HTML代码

前端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}}

       .button1 {

           background-color: #f44336; 

           border: none;

           color: white;

           padding: 15px 32px;

           text-align: center;

           text-decoration: none;

           display: inline-block;

           font-size: 28px;

           margin-bottom: 100px;

           text-decoration:none;

           color: white;

       }

       #myAnchor

       {

         text-decoration:none;

         color: white;

       }

   </style>

</head>

<body>

<div id="wrapper" style="position: relative;top: 300px;left:300px;">

   <button class="button1"><a id="myAnchor" href="https://www.cnblogs.com/du-hong/">北京-宏哥</a></button></br>

   <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>

3.2滑块CSS样式

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.3滑块拖拽JS

滑块拖拽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');


   }

};

3.4jquery-1.7.1.min.js下载地址

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

4.自动化代码实现

4.1代码设计

4.2参考代码

package lessons;

import org.junit.Test;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.chrome.ChromeDriver;

import org.openqa.selenium.interactions.Actions;


/**

* @author 北京-宏哥

*

* 《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)

*

* 2021年10月15日

*/

public class ActionsTest {

   

   @Test

   public void test() throws InterruptedException {

       

       System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe");

       

       WebDriver driver =null;

       try {

           driver =new ChromeDriver();

           driver.get("file:///C:/Users/DELL/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();

       }

   }


}

4.3运行代码

1.运行代码,右键Run AS->Junit Test,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

5.小结

宏哥这里用了单元测试的方法,当然你也可以用之前的方法进行测试,在这里宏哥就不在赘述!

1.在设计代码过程中会报错:Type mismatch: cannot convert from Test to Annotation  

解决办法:参考宏哥这篇文章的小结:https://www.cnblogs.com/du-hong/p/15189106.html




每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):

Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

相关文章
|
6天前
|
Web App开发 数据采集 JavaScript
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
本文介绍了Selenium、Chrome DevTools及Chrome DevTools Protocol (CDP) 的基本功能与应用。Selenium是一款开源自动化测试工具,适用于网页端应用程序测试和数据采集,具备跨平台特性。Chrome DevTools内置浏览器中,提供调试、分析Web应用程序的功能,包括元素、控制台、源代码和网络选项卡等。CDP是一套用于与Chromium内核浏览器通信的API,支持自动化测试和性能分析。文中还展示了Selenium与CDP结合使用的示例,如捕获网络请求数据和打印网页内容,并推荐了相关书籍和资源以供深入学习。
80 39
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
|
15天前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
65 19
Selenium IDE:Web自动化测试的得力助手
|
17天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
113 17
Selenium:强大的 Web 自动化测试工具
|
1月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
58 1
|
2月前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
70 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
2月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
537 5
|
1月前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
48 0
|
2月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【10月更文挑战第1天】告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
83 4
|
2月前
|
Web App开发 Java 测试技术
一、自动化:web自动化。Selenium 入门指南:从安装到实践
一、自动化:web自动化。Selenium 入门指南:从安装到实践
55 0
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
68 4

热门文章

最新文章