自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)

简介: 本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。

测试步骤

  • 指明测试网址:http://localhost:8080/jpress/user/register
    在这里插入图片描述
  • 通过Selemium的get函数发起HTTP请求,进入此网址
  • 通过maximize_window扩充整个屏幕
  • 通过id、name、xpath、class_name来定位目标位置,用于实现包括输入信息,点击信息等操作
  • 如果注册出错会出现弹窗,弹窗我们可以使用WebDriverWait…until来显示等待来捕捉弹框的出现,使用的是expected_conditions.alert_is_present来等待查看,捕捉弹窗通过switch_to.alert来获取弹窗警告
  • 获取之后可以通过assert断言来检测弹窗是否符合预期,后可通过accept来使得弹窗消失。

具体代码实现

import pickle
import random
import string
import time, os, ddddocr
from PIL import Image

def re_code_pic(picdir):
    ocr = ddddocr.DdddOcr(show_ad=False)
    with open(picdir, 'rb') as f:
        img_bytes = f.read()
    res = ocr.classification(img_bytes)
    return res

def get_code(driver, id="captchaimg", name = False):
    # 获取验证码图片
    t = time.time()
    path = os.path.dirname(os.path.dirname(__file__)) + "/screenshots"
    pname = path + '/' + str(t) + ".png"
    driver.save_screenshot(pname)

    if name == True:
        ce = driver.find_element_by_name(id)
    else:
        ce = driver.find_element_by_id(id)

    # print(ce.location, ce.size)
    # x,y 左顶点的坐标  w,h 高宽
    left = ce.location["x"]
    top = ce.location["y"]
    right = ce.size["width"] + left
    height = ce.size["height"] + top
    im = Image.open(pname)
    # 剪裁图片并保存 (left, upper, right, lower)
    # lower 减小是指减小下方的高度
    # right减小是向左移动,减小右方的宽度
    # upper减小是减小上方的宽度,向下移动
    # left增加是向右移动
    # img = im.crop((left, top, right, height))
    # print(left, top, right, height)
    if name == True:
        img = im.crop((left + 430, top + 100, right + 320, height + 110))
    else:
        img = im.crop((left + 145, top + 110, right + 175, height + 125))

    t = time.time()
    pname2 = path + "/" + str(t) + ".png"
    img.save(pname2) # 这里是截图到验证码的图片
    text = re_code_pic(pname2)
    return text

# 生成随机字符串
def get_random_str():
    randstr = "".join(random.sample(string.ascii_letters + string.digits, 8))
    return randstr

# 保存cookie和加载cookie的方法
def save_cookie(driver, path):
    with open(path, "wb") as filehandler:
        cookies = driver.get_cookies()
        print(cookies)
        pickle.dump(cookies, filehandler)

def load_cookie(driver, path):
    with open(path, "rb") as cookiesfile:
        cookies = pickle.load(cookiesfile)
        for cookie in cookies:
            driver.add_cookie(cookie)
# get_random_str()
from time import sleep
from selenium import webdriver # 驱动
from selenium.webdriver.support import expected_conditions as EC # 期望等待条件的出现
from selenium.webdriver.support.wait import WebDriverWait # 在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在(显示等待)
from util import utils

class TestUserRegister(object):
    def __init__(self):
        self.driver = webdriver.Edge("drivers/msedgedriver.exe")
        self.driver.get("http://localhost:8080/jpress/user/register")
        self.driver.maximize_window()

    # 测试验证码错误
    def test_register_code_error(self):
        username = "test001"
        email = "test001@qq.com"
        pwd = "123456"
        confirmPwd = "123456"
        captcha = "666"
        expected = "验证码不正确"

        self.driver.find_element_by_name("username").send_keys(username)
        self.driver.find_element_by_name("email").send_keys(email)
        self.driver.find_element_by_name("pwd").send_keys(pwd)
        self.driver.find_element_by_name("confirmPwd").send_keys(confirmPwd)
        self.driver.find_element_by_name("captcha").send_keys(captcha)
        self.driver.find_element_by_class_name("btn").click()

        # 切换弹框 WebDriverWait等待5秒直到弹框出现,不然会报错
        WebDriverWait(self.driver, 5).until(EC.alert_is_present())
        alert = self.driver.switch_to.alert # 获取弹窗警告
        assert alert.text == expected
        alert.accept() # 弹窗消失
        sleep(5)
        print("测试用例1:{}".format(expected))

    # 测试成功
    def test_register_ok(self):
        username = utils.get_random_str()
        email = username + "@qq.com"
        pwd = "123456"
        confirmPwd = "123456"
        captcha = utils.get_code(self.driver, "captchaimg")
        expected = "注册成功,点击确定进行登录。"
        self.driver.find_element_by_name("username").clear()
        self.driver.find_element_by_name("username").send_keys(username)
        self.driver.find_element_by_name("email").clear()
        self.driver.find_element_by_name("email").send_keys(email)
        self.driver.find_element_by_name("pwd").clear()
        self.driver.find_element_by_name("pwd").send_keys(pwd)
        self.driver.find_element_by_name("confirmPwd").clear()
        self.driver.find_element_by_name("confirmPwd").send_keys(confirmPwd)
        self.driver.find_element_by_name("captcha").clear()
        self.driver.find_element_by_name("captcha").send_keys(captcha)
        self.driver.find_element_by_class_name("btn").click()

        # 切换弹框 WebDriverWait等待5秒直到弹框出现,不然会报错
        WebDriverWait(self.driver, 5).until(EC.alert_is_present())
        alert = self.driver.switch_to.alert # 获取弹窗警告
        assert alert.text == expected
        alert.accept() # 弹窗消失
        print("测试用例2:{}".format(expected))

结果显示

在这里插入图片描述

难点

  • 需要获取验证码的位置,通过验证码识别(ddddocr)来检测验证码,其中获取验证码的位置可以通过find_element_by_name找到其位置,并通过location和size来获取左顶点和宽高,根据crop来对验证码区域进行裁剪,然后送入到ddddocr进行检测。
  • 弹窗检测:学会使用WebDriverWait…until和expected_conditions来对弹窗进行处理。
目录
相关文章
|
2月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
769 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
118 1
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
73 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
134 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
275 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
2月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
62 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
测试技术 数据安全/隐私保护 Python
自动化测试项目实战笔记(四):测试用户登录(账号密码错误,成功,出现弹框等情况)
本文介绍了使用Selenium进行自动化测试时如何测试用户登录的不同情况,包括账号密码错误、登录成功以及处理登录时出现的弹框,并提供了相应的Python代码实现。
79 0
自动化测试项目实战笔记(四):测试用户登录(账号密码错误,成功,出现弹框等情况)
|
2月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
75 4
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
63 4
|
18天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####