当前位置: 首页 > news >正文

web自动化系列-使用普通模式编写测试用例以及存在问题(十六)

在这里插入图片描述

前面已经把selenium的主要操作介绍完毕 ,接下来我们通过编写几条测试用例感受下selenium的用法 。

1.用例需求

还是以登录为例 ,需要实现的测试用例为 :

  • case1:输入正确的用户名和密码进行登录
  • case2 : 输入正确的用户名和错误的密码登录
  • case3 : 输入正确的用户名和空的密码进行登录

以上登录的操作步骤为 :

  1. 点击首页的’登录’按钮,进入登录页面
  2. 输入正确的用户名
  3. 输入错误的密码
  4. 输入验证码
  5. 点击登录按钮
  6. 获取提示信息,并验证其信息 。

2.具体代码

在这里我们使用uninttest编写以上的3条用例 。

import unittest
from selenium import webdriver
import timeclass TestLogin(unittest.TestCase):def setUp(self) -> None:self.driver = webdriver.Chrome()self.driver.get("http://localhost")def tearDown(self) -> None:self.driver.quit()# case1 : 正确的用户名和正确的密码登录def test_login_success(self):# 1) 定位登录self.driver.find_element_by_link_text("登录").click()time.sleep(3)# 2) 输入用户名self.driver.find_element_by_id("username").send_keys("13988888888")# 3) 输入密码self.driver.find_element_by_name("password").send_keys("123456")# 4) 输入验证码self.driver.find_element_by_name("verify_code").send_keys("8888")time.sleep(1)# 5) 点击登录self.driver.find_element_by_class_name("J-login-submit").click()time.sleep(5)account_text = self.driver.find_element_by_link_text("13988888888").textself.assertEqual('13988888888',account_text)# case2 : 正确的用户名和错误的密码登录def test_password_is_wrong(self):# 1) 定位登录self.driver.find_element_by_link_text("登录").click()time.sleep(3)# 2) 输入用户名self.driver.find_element_by_id("username").send_keys("13988888888")# 3) 输入密码self.driver.find_element_by_name("password").send_keys("1234567")# 4) 输入验证码self.driver.find_element_by_name("verify_code").send_keys("8888")time.sleep(1)# 5) 点击登录self.driver.find_element_by_class_name("J-login-submit").click()time.sleep(3)password_error_msg = self.driver.find_element_by_class_name("layui-layer-content").textself.assertEqual("密码错误!",password_error_msg)# case3 : 正确的用户名和空的密码登录def test_password_is_null(self):# 1) 定位登录self.driver.find_element_by_link_text("登录").click()time.sleep(3)# 2) 输入用户名self.driver.find_element_by_id("username").send_keys("13988888888")# 3) 输入密码self.driver.find_element_by_name("password").send_keys("")# 4) 输入验证码self.driver.find_element_by_name("verify_code").send_keys("8888")time.sleep(1)# 5) 点击登录self.driver.find_element_by_class_name("J-login-submit").click()time.sleep(3)password_error_msg = self.driver.find_element_by_class_name("layui-layer-content").textself.assertEqual("密码不能为空!", password_error_msg)

3.具体问题

仔细观察的你 ,会发现以上编写方式是存在一些问题的 ,具体包括 :

  • 第一、代码步骤相同 ,只是数据不同 ,导致大量的冗余代码 ,一旦某一个步骤发生变化 ,就会导致全部的用例都跟着改变 。
  • 第二、同一元素对象也是多次被引用 ,比如定位输入用户名有3条用例都用到了 ,但若这个元素的属性或者值变了 ,同样需要改3处。
  • 第三、如果我将以上的操作封装为页面呢 ? 比如我把点击、输入框输入 、获取文本事件等都要开放给用户去编写 ,像编写Excel或者配置一样那样编写,又改如何解决呢 ?

那么 ,以上的三个问题又该如何解决呢 ?其实它们就是3个典型的问题 ,分别对应三个非常流行的技术 ,分别是 :

  • 代码步骤相同,步骤不同的问题 ,可以通过数据驱动(数据参数化)来解决 。python自动化测试框架中如何实现数据参数化?使用parameterized包帮你搞定它。 - 知乎 (zhihu.com)
  • 同一元素对象多次被引用 :可以通过po模型来解决
  • 把selenium操作事件进行封装后开放给用户 ,可以通过关键字驱动来解决 。

其中数据参数化已经介绍 ,这里不在赘述 ,剩下的po模型和关键字驱动放在后面章节介绍 。在这里插入图片描述

相关文章:

web自动化系列-使用普通模式编写测试用例以及存在问题(十六)

前面已经把selenium的主要操作介绍完毕 ,接下来我们通过编写几条测试用例感受下selenium的用法 。 1.用例需求 还是以登录为例 ,需要实现的测试用例为 : case1:输入正确的用户名和密码进行登录case2 : 输入正确的用户名和错误的…...

VSCode 配置 Qt 开发环境

文章目录 1. 环境说明2. 配置系统环境变量 1. 环境说明 操作系统:Windows 11VSCode版本:1.88.1CMake版本:3.27.7Qt6版本:6.7.0(MinGW 11.2.0 64-bit) 2. 配置系统环境变量 自行根据自己的Qt安装路径配置 配置 MinGW 和 CMake C…...

【Jenkins】持续集成与交付 (七):Gitlab添加组、创建用户、创建项目和源码上传到Gitlab仓库

🟣【Jenkins】持续集成与交付 (七):Gitlab添加组、创建用户、创建项目和源码上传到Gitlab仓库 1、创建组2、创建用户3、将用户添加到组中4、在用户组中创建项目5、源码上传到Gitlab仓库5.1 初始化版本控制5.2 将文件添加到暂存区5.3 提交代码到本地仓库5.4 推送代码到 Git…...

L1-017 到底有多二

一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数&…...

常用语音识别开源四大工具:Kaldi,PaddleSpeech,WeNet,EspNet

无论是基于成本效益还是社区支持,我都坚决认为开源才是推动一切应用的动力源泉。下面推荐语音识别开源工具:Kaldi,Paddle,WeNet,EspNet。 1、最成熟的Kaldi 一个广受欢迎的开源语音识别工具,由Daniel Pove…...

python笔记 | 哥德巴赫猜想

哥德巴赫猜想:每个不小于6的偶数都可以表示成两个素数之和。 素数:只能被1和自身整除的正整数。就是大于1且除了1和它本身之外没有其他因数的数。例如,2、3、5、7、11等都是素数,而4、6、8、9等则不是素数。 下面这段Python代码…...

IO基础-IO多路复用基础

Java的Selector封装了底层epoll和poll的API,可以通过指定如下参数来调用执行的内核调用, 在Linux平台,如果指定 -Djava.nio.channels.spi.SelectorProvidersun.nio.ch.PollSelectorProvider 则底层调用poll, -Djava.nio.channels.spi.Selec…...

Python机器学习项目开发实战:如何进行人脸识别

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程: Python机器学习项目开发实战_人脸识别_编程案例解析实例详解课程教程.pdf 人脸识别是一个复杂但…...

管理能力学习笔记五:识别团队角色,因才施用

识别团队角色,因才施用,需要做到以下三点 扬长避短 管理者要学会问自己员工能把什么做好,而不是想方设法改造他们的短处 。 – 彼得德鲁克 人岗匹配 将合适的人放在合适的位置 人才多样化 团队需要各式各样的人才,才能高效配合…...

Real3DPortrait照片对口型,数字人,音频/视频驱动数字人

先看效果 上传一张图片和一段音频,照片如下: 合成后效果如下: 照片对口型-音频驱动 支持音频驱动和视频驱动,视频可以使照片有参照视频中的口型和和动作。 项目地址 https://github.com/yerfor/Real3DPortrait 我的环境 win…...

Stable Diffusion之Ubuntu下部署

1、安装conda环境 conda create -n webui python3.10.6 2、激活环境 每次使用都要激活 conda activate webui 注意开始位置的变换 关闭环境 conda deactivate webui 3、离线下载SD 代码 https://github.com/AUTOMATIC1111/stable-diffusion-webui https://github.com/Stabilit…...

LeetCode-15-三数之和问题

题目说明 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a b c 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 给定数组 nums [-1, 0,…...

springboot2集成东方通tongweb嵌入式版

由于最近项目需要国产化信创改造,引入东方通tongweb 联系东方通厂家 ,将依赖导入到maven仓库,并获取嵌入式版license文件修改pom.xml,引入依赖,注意springboot版本,这里以springboot2举例 首先移除springb…...

【二分查找】Leetcode 33. 搜索旋转排序数组【中等】

搜索旋转排序数组 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], num…...

Zephyr Windows开发环境搭建

Zephyr 如果有错误或未及时更新&#xff0c;请以官网文档为主 官网&#xff1a;https://docs.zephyrproject.org/latest/develop/getting_started/index.htm 下载安装 Chocolatey 这是一个类似于在Linux系统下 yum 和 apt 那样的包管理器 官网&#xff1a;https://chocolat…...

如何安全地设置MySQL数据库的IP白名单

设置MySQL数据库的IP白名单是一种关键的安全措施&#xff0c;可以确保只有来自特定IP地址的请求被允许访问数据库服务器。这里是如何安全地配置这些设置的分步指南。 步骤1: 登录到MySQL服务器 首先&#xff0c;使用管理员权限登录到你的MySQL服务器。如果你使用的是命令行&a…...

Chatgpt掘金之旅—有爱AI商业实战篇|品牌故事业务|(十六)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业在品牌故事业务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随…...

为什么要部署IP SSL证书?怎么申请?

我们需要知道什么是IP SSL证书。SSL&#xff0c;全称为Secure Sockets Layer&#xff0c;即安全套接层&#xff0c;是为网络通信提供安全及数据完整性的一种安全协议。而IP SSL证书就是基于SSL协议的一种证书&#xff0c;它能够为网站和用户的数据传输提供加密处理&#xff0c;…...

最新免费 ChatGPT、GPTs、AI换脸(Suno-AI音乐生成大模型)

&#x1f525;博客主页&#xff1a;只恨天高 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ ChatGPT3.5、GPT4.0、GPTs、AI绘画相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容…...

前端的未来已然到来

随着整个软件行业正逐渐转向以打包、托管与抽象解决方案为主体的新形态&#xff0c;后端与基础设施带来的麻烦正越来越少&#xff0c;而立足堆栈顶部的前端工程师开始成为施展空间最大的时代宠儿。甚至不只是他们&#xff0c;如今无论是前端、后端还是运维开发者&#xff0c;他…...

Fillinger智能填充脚本终极指南:如何快速实现图形元素的智能分布

Fillinger智能填充脚本终极指南&#xff1a;如何快速实现图形元素的智能分布 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts Fillinger是一款专为Adobe Illustrator设计的智能填充脚…...

OpenClaw多模型管理:同时接入百川2-13B-4bits与其他开源大模型

OpenClaw多模型管理&#xff1a;同时接入百川2-13B-4bits与其他开源大模型 1. 为什么需要多模型管理&#xff1f; 去年冬天&#xff0c;我尝试用OpenClaw自动化处理一批技术文档的翻译和摘要任务时&#xff0c;遇到了一个典型问题&#xff1a;当处理简单段落翻译时&#xff0…...

基于comsol的三相电力变压器电磁场与电路耦合计算的电压电流及磁通密度分布分析

comsol三相电力变压器电磁场和电路耦合计算&#xff0c;可以得到变压器高低压绕组电压电流分布以及变压器磁通密度分布三相电力变压器建模这事儿&#xff0c;说难不难说简单也不简单。前两天用COMSOL折腾了个带电路耦合的模型&#xff0c;顺手把绕组电流分布和铁芯磁通都摸清楚…...

OpenClaw日志分析:QwQ-32B任务执行效率监控

OpenClaw日志分析&#xff1a;QwQ-32B任务执行效率监控 1. 为什么需要监控OpenClaw任务执行效率 去年冬天&#xff0c;我部署了一个自动整理会议纪要的OpenClaw工作流。起初运行得很顺利&#xff0c;直到某天早上发现它漏掉了三场重要会议的记录。检查日志才发现&#xff0c;…...

TranslucentTB启动失败解决方案:3种方法修复Microsoft.UI.Xaml.2.8缺失问题

TranslucentTB启动失败解决方案&#xff1a;3种方法修复Microsoft.UI.Xaml.2.8缺失问题 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB T…...

2026年AI智能体大爆发:下一个十年风口,普通人的超级财富密码

比尔盖茨曾断言&#xff1a;“AI智能体&#xff08;AI Agent&#xff09;将彻底改变人们使用计算机的方式。”如果说2023年是大语言模型&#xff08;LLM&#xff09;的启蒙元年&#xff0c;那么到2026年&#xff0c;具备“感知-规划-行动”自主闭环能力的AI智能体将迎来真正的商…...

OpenClaw故障排查大全:百川2-13B量化模型接入常见报错解决

OpenClaw故障排查大全&#xff1a;百川2-13B量化模型接入常见报错解决 1. 当网关拒绝启动时 上周深夜调试OpenClaw时&#xff0c;我遇到了最棘手的网关启动失败问题。控制台反复报错Error: listen EADDRINUSE: address already in use :::18789&#xff0c;但用lsof -i :1878…...

ROS Noetic + RealSense D435i:从驱动安装到RVIZ点云显示的完整工作流解析

ROS Noetic RealSense D435i&#xff1a;从驱动安装到RVIZ点云显示的完整工作流解析 在机器人视觉项目的初期搭建阶段&#xff0c;开发者往往面临一个关键挑战&#xff1a;如何将深度相机从"硬件连接"快速推进到"可用数据流"状态。以Intel RealSense D435…...

别再傻傻分不清了!用Simulink手把手带你搞懂导纳控制与阻抗控制的本质区别

导纳控制 vs 阻抗控制&#xff1a;从理论到Simulink实战的深度解析 在机器人控制领域&#xff0c;柔性交互是一个永恒的话题。想象一下&#xff0c;当机械臂需要完成精密装配任务时&#xff0c;既要有足够的刚性保证定位精度&#xff0c;又要在意外碰撞时表现出适当的柔顺性——…...

实战应用:从git安装到项目初始化,用快马生成数据分析项目版本控制模板

今天想和大家分享一个数据分析项目中经常被忽视但极其重要的环节——Git版本控制的初始化配置。作为一个经常用Python做数据分析的开发者&#xff0c;我发现很多人在项目初期就忽略了版本控制的重要性&#xff0c;导致后期协作时出现各种混乱。下面我就结合InsCode(快马)平台&a…...