保存验证码的方法_selenium自动化测试:6.验证码处理

dfb60ed046719616fe65a011f74cb3f9.png

0.前言

如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负众望。谢谢!!!

1.前提

基于win10专业版64位系统+64位jdk1.8+64位python3.6.5+社区版pycharm2018.1.3+unittest+selenium3.141.0。

2.验证码处理

目前大家在访问很多网站的时候,尤其登录页面可能都会有要求输入验证码的校验,其目的就是为了识别是人还是机器在操作,从而增强系统的安全性。

验证码的种类有很多,比如:纯数字验证码,纯字母验证码,数字+字母验证码,汉字验证码,图片验证码,拼图验证码等等。无论哪种,我们在做自动化测试时,如何解决验证码的校验问题呢?

1)屏蔽验证码

直接找负责对应模块的开发或者让你的领导找对方,要求其在内部测试环境先临时屏蔽验证码(即去掉验证码的校验),不用输入验证码即可登录。注意再正式上线的时候一定要记得恢复该功能,比如在BUG库里以一个问题单来跟踪,否则会有安全风险。

2)万能验证码

这种方式与上面的方式类似,还是找开发人员来处理,加个判断差不多两行代码就搞定了,比如输入1111可以始终校验通过。相对第一种处理方式能好一些,因为有验证码校验,输入正确的验证码或者输入1111的验证码都可以校验通过,安全性稍微高一些,但在上线的时候也需要去掉万能验证码哦。

3)OCR图像识别

比较麻烦的一种方式,需要额外安装一些工具,用代码来识别验证码图片中的正确字符,然后输入验证码输入框完成输入校验。存在一定的误差和效率的问题,如果是自己公司内部的产品,做自动化测试时不建议使用此种方式,有那个研究的时间多去完善下别的模块的测试脚本。如有兴趣可参考下方我的另外一篇文章(当前仅支持简单的图片文字识别):

海阔and天空:OCR图像识别:python+pytesseract+Tesseract-OCR​zhuanlan.zhihu.com
17d484b230978f4026220ba4eb277eca.png

4)添加cookie

假设一个登陆界面,有用户名、密码和验证码三个输入框和一个登陆按钮,webdriver打开页面时不做任何登陆输入,而是直接将登陆的用户名和密码信息直接用代码添加到浏览器对象的cookie中,无序输入验证码,然后刷新下页面即可自动完成登录。原理是什么呢?就是比如你正常登录一个网站,然后直接关闭浏览器,再次打开浏览器你会发现访问同一页面会自动登录了,并不需要你再次登录。为什么呢?因为用到了cookie或者session缓存机制,有效期内,无需用户再次登录。

参考代码:

from selenium import webdriver
dr = webdriver.Chrome()
dr.get("http://qzx:8080/Test1.4/")
dr.add_cookie({'name':'username','value':'admin'})#添加用户名cookie
dr.add_cookie({'name':'password','value':'admin'})#添加密码cookie
# dr.get("http://qzx:8080/Test1.4/")#再次打开同一页面会自动登录
dr.refresh()#刷新页面会自动登录

注:该方法不是万能的,仅适用于使用cookie将用户登录信息保存在本地的一些系统,使用session将用户登录信息保存在远端服务器上的系统时不行的哦。

5)打码平台

将验证码图片发给第三方的平台,来帮你识别。不常用,略。

6)其它方式

总结:关于自动化测试时的验证码处理方式其实有很多,建议大家使用上面第二种(即万能验证码)的方式,有限保证安全性的同时有确保了验证功能的完整性,比如你做自动化测试使用完成验证码实现脚本,别的手工测试人员继续使用页面上显示的验证码,正确手工输入测试即可,互不影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

非root用户组启动sftp_如何在 Debian 10 中配置 Chroot 环境的 SFTP 服务 | Linux 中国

SFTP 是最常用的用于通过 ssh 将文件从本地系统安全地传输到远程服务器的方法https://linux.cn/article-12186-1.html作者:Pradeep Kumar译者:郑SFTP 意思是“安全文件传输协议(Secure File Transfer Protocol)” 或 “SSH 文件传输协议(SSH File Transf…

java权限修饰符

java权限修饰符 java一共有四种访问控制符1、private 表示私有,只有自己类能访问2、default 表示没有修饰符修饰,只有同一个报的类能访问3、protected 表示可以被同一个包的类以及其他包中的子类访问4、public 表示可以被该项目的所有包中的所有类访问类…

java封装练习

java封装练习 /*** 以面向对象的思想,编写自定义类描述图书信息。设定属性包括:书名、作者、出版社名、价格* 方法包括:信息介绍** 要求:* 1、设置属性的私有访问权限,通过公有的get、set方法实现对属性的访问* 2、限…

接口自动化测试_Python自动化测试学习路线之接口自动化测试「模块四」

01.接口自动化测试概念(接口测试的定义与意义;接口测试的实现方式和接口自动化的实现流程)02.HTTP协议(通信协议原理;HTTP与HTTP协议详解(请求,响应,请求方法,状态码)、session、cookie、token鉴权)03.JSON数据格式(JSON与XML的比较;JSON的语法规则;JSON的数据类型)…

java继承实现

java继承实现 /*** 继承*/ public class Animal { //默认animal集成objectprivate String color;private int age;public Animal(){super();}public Animal(String color,int age){this.color color;this.age age;}public void eat(){System.out.println("吃饭"…

spss多元非线性曲线拟合_快速掌握SPSS数据分析

在和SPSSAU的用户交流中,我们发现本是非常简单的数据分析原理以及软件工具,结果非常多的同学完全不会SPSS数据分析,不知道如何学习,即使学过相关原理,但对具体数据进行分析时也有非常多问题。这不禁让我们思考&#xf…

继承情况下构造方法的调用过程-java

继承情况下构造方法的调用过程-java super关键字:可以看做是直接父类对象的引用。每个子类对象都会有一个super引用 指向其直接父类对象。super可以:1、调用成员变量 super.color 2、调用成员方法 super.show 3、调用构造方法 super&#xff0…

多态--Java

多态--Java 多态指的是同一个方法调用,由于对象不同可能会有不同的行为。编译器类型指的是‘’左边的类型,运行时类型指的是‘’右边的类型。当有继承关系时,可能发生编译器 和运行期类型不同的情况,即编译期类型是父类类型&…

tex文件用什么软件打开_pdf怎么打开?用什么软件打开pdf?

时光荏苒,转眼2020年还有几个月就结束了,我们公司最近举办了"2020年工作季度总结"大会,领导要求每个部门的不同职员要写一份总结,讲述自己这段时间的经验和教训。而我作为办公室文秘,负责收集他们的个人总结…

Java一个小练习----String类型转换int类型

Java一个小练习 把字符串str分割程String数组,然后转换成int数组,排序 String str "123 345 89 93 2 6573 223" 然后在拼接成一个字符串如下: "2 89 93 123 223 345 6573" /*** String str "123 345 89 93 2…

高级语言的编译过程和解释过程_进来了解一下C语言真正的编译过程看你掌握了吗?...

C语言 前言说实话,很多人做了很久的C/C,也用了很多IDE,但是对于可执行程序的底层生成一片茫然,这无疑是一种悲哀,可以想象到大公司面试正好被问到这样的问题,有多悲催不言而喻,这里正由于换工作的缘故&…

final关键字---Java

final关键字---Java final关键字的作用1、修饰变量:被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。2、修饰方法:该方法不可被子类重写,但是可以被重载。3、修饰类:修饰的类不能被继承。注意:1、…

下载java离线文档的方法

第一种使用方法,直接下载 https://stackoverflow.com/questions/6986993/how-to-download-javadoc-to-read-offline 第二种方法,使用zeal软件 zeal简介:https://zealdocs.org/ 个人认为第二种方法好一点

接口-----java

接口就是规范,定义的是一组规则,体现了现实世界中“如果你是...则必须你能....”的思想。 如果你是天使,则必须能飞。如果你是汽车,则必须能跑。接口的本质就是契约,就像我们人间 的法律一样,大家都要遵守。…

如何利用flume进行日志采集

介绍 Apache Flume 是一个分布式、可靠、高可用的日志收集、聚合和传输系统。它常用于将大量日志数据从不同的源(如Web服务器、应用程序、传感器等)收集到中心化的存储或数据处理系统中。 基本概念 Agent(代理): …

接口应用:内部比较器Comparable

接口应用:内部比较器Comparable public interface Comparable {public int compareTo(Object obj); }public class Book implements Comparable{private String bookName;private String author;private String publisher;private double price;Overridepublic int…

axios进行图片上传组件封装

文章目录 前言图片上传接口(axios通信)图片上传使用upload上传头像效果展示总结 前言 node项目使用 axios 库进行简单文件上传的模块封装。 图片上传接口(axios通信) 新建upload.js文件,定义一个函数,该函数接受一个上传路径和一…

JDK1.8的接口新特性

JDK1.8的接口新特性 JDK7及其之前1、接口的变量都是public final static 全局静态常量,无变化。2、接口中都是抽象abstract方法,不能有static方法(因为abstract和static、final、private不能共存)JDK1.8及其之后1、接口中可以添加…

多相机坐标转换_使用KITTI数据集实现坐标转换

本文的主要内容,是讨论如何将KITTI激光雷达的点云数据,映射到图像中去。KITTI数据集是怎么采集的下面这幅图是车的俯视图,可以看到,用到了2个彩色相机,2个灰度相机,1个激光雷达。1个GPS/IMU。图1 KITTI车俯…

内部类-----Java

内部类-----Java 内部类是一类特殊的类,指的是定义在一个类的内部的类,在Java中内部类主要分为非静态内部类、静态内部类、局部 内部类、匿名内部类。 非静态内部类,作为类的成员存在,和成员变量、构造方法、代码块并列。因为是…