《手把手教你》系列技巧篇(三十一)-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工具基础使用教程

相关文章
|
4月前
|
Java 关系型数据库 数据库
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
569 3
|
3月前
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
280 10
|
2月前
|
Oracle Java 关系型数据库
Java 简单教程
Java是跨平台、面向对象的编程语言,广泛用于企业开发、Android应用等。本教程涵盖环境搭建、基础语法、流程控制、面向对象、集合与异常处理,助你快速入门并编写简单程序,为进一步深入学习打下坚实基础。
338 0
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
571 5
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
358 31
Selenium IDE:Web自动化测试的得力助手
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
733 17
Selenium:强大的 Web 自动化测试工具
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
2072 5
|
Web App开发 缓存 Linux
高效Selenium测试技巧:轻松控制已开启的浏览器
【10月更文挑战第13天】在进行Selenium测试时,通常会启动新浏览器实例,但有时需要控制已开启的浏览器,以节省时间并更真实地模拟用户行为。这可通过设置Chrome为可远程控制并使用`Remote WebDriver`连接实现。需在启动Chrome时添加`--remote-debugging-port`参数,并通过Python脚本中的`webdriver.Remote`连接至指定端口。此外,还可利用会话ID(Session ID)重新连接浏览器,提高测试灵活性。需要注意浏览器版本兼容性及元素定位稳定性等问题,确保测试准确性和一致性。
1097 1

热门文章

最新文章