Selenium21--验证码测试

验证码简介

  • 有些网站需要验证码通过后方可进入网页,目的很简单,就是区分是自然人访问还是计算机程序访问。
  • 验证码:简称为captcha
    • 一种随机生成的信息(数字、字母、汉字、图片、算术题、问答题)或者系统发送到客户终端的信息,为了防止恶意的请求行为,增加应用程序的安全性。
    • 防止恶意攻击、盗取信息。

验证码种类

验证码测试难点

  • Selenium自动化测试与验证码设计初衷是矛盾的:

    • selenium自动化测试:用程序替代人工操作
    • 验证码存在的意义:让自然人能操作,程序不能操作
  • Selenium测试处理验证码的原因:

    • 在web应用中,大部分系统在用户登录注册的时候都要求输入验证码,而在设计自动化测试脚本时,就需要临时处理验证码的问题,否则无法继续执行测试
    • 在selenium中并没有对验证码处理的方法

验证码的常见处理方式

  • 通过配置去掉验证码(测试环境下-采用)
    • 开发来提供配置,例如配置文件、界面配置、修改数据库等,建议使用
  • 设置万能验证码(生产环境和测试环境下-采用)
    • 开发来提供万能验证码,生产和测试环境下采用,必须注意保密,建议使用
  • 验证码识别技术(通过编程语言库)
    • OCR技术:成功率不高,验证码种类繁多,开发成本高,不建议
  • 记录cookie(通过添加cookie来跳过登录)

验证码测试策略

  • 测试登录功能时,验证码测试策略:
    • 去掉验证码(测试环境下)、设置万能验证码(生产环境和测试环境)来进行自动化测试
    • 验证码部分采用手工测试方式进行测试
  • 不需要测试登录功能时,验证码测试策略
    • 记录cookie进行跳过登录

配置去掉验证码

  • ECSHop界面上的验证码可以配置取消
    • 登录进入后台→系统设置→验证码管理

万能验证码

  • ECShop后台登录页,万能验证码是开发人员写在程序代码里的“0”,所以不管图片上是什么内容,用这个验证码始终可以登录成功。

ddddocr识别验证码

  • ddddocr是由sml2h3开发的专为验证码厂商进行对自家新版本验证码难易强度进行验证的一个python库。
    安装ddddcor
pip install ddddcor

导入ddddcor

import ddddcor

定位识别图片元素

img = driver.find_element(By.方法,参数)

将图片元素截图

img.screenshot("check.png")

读图片文件的二进制

img_bytes = open('check.png','rb').read()

创建ocr对象

ocr = ddddocr.Ddddocr()

识别验证码

check_code = ocr.classsification(img_bytes)
"""
	识别ECshop后台登录页的验证码
"""
import os
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
driver = webdriver.Firefox() # 启动浏览器
driver.get('http://localhost/upload/admin/privilege.php?act=login') # 打开后台首页
driver.find_element(By.NAME,"username").send_keys('admin') # 定位管理员姓名文本框输入用户名
driver.find_element(By.NAME,"password").send_keys('admin123')# 定位管理员密码文本框输入密码
filename = os.path.join(os.path.dirname(os.getcwd()),"screenshots","check.png") # 创建变量存放本地图片地址
driver.find_element(By.XPATH,'//img[@alt="CAPTCHA"]').screenshot(filename) # 获取验证码图片
img_binary = open(filename,'rb').read() # 读取验证码信息转为二进制模式
ocr = ddddocr.Ddddocr() # 创建验证码识别对象
captcha = ocr.classification(img_binary) # 识别验证码图片上的内容
driver.find_element(By.NAME,'captcha').send_keys(captcha) # 定位验证码文本框,输入识别出的验证码信息
driver.find_element(By.XPATH,'//input[@value="进入管理中心"]').click() # 定位进入管理中心按钮,并点击
driver.quit() # 退出浏览器

posted @   暄总-tester  阅读(640)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示