PS 需要第十五界蓝桥杯模拟赛1期功能测试模板、单元测试被测代码、自动化测试被测代码请加🐧:1940787338 备注:15界蓝桥杯省赛软件测试模拟赛1期
题目1 功能测试用例1(测试用例)(15分)
【前期准备】
按步骤部署好被测系统,请考生使用火狐浏览器(v114 版本以上版本)进行测试。
- 访问网址:请查看部署成功的被测系统 URL
- 用户名:admin
- 密 码:admin123
- 验证码:666
【题目描述】
部署完毕后请熟悉【蓝桥后台管理系统】界面和功能需求,针对指定的功能模块进行测试用例的设计和缺陷的寻找,并把测试用例和缺陷报告填写到指定的 excel 文件中。
请使用 场景法 对首页的【登录】功能进行测试用例的设计,请设计 6 条测试用例达到该方法的有效覆盖。并把测试用例填写在指定的 【模拟赛1期测试用例.xlsx】 用例文件中的【题目1-场景法测试用例】中。如下图所示:
【功能截图】
【需求描述】
题目1 解题思路 功能测试用例1
步骤1:分析题目,列出基本流和备选流。如下表所示。
基本流 | 输入有效用户名->输入正确密码->验证码正确->点击登录 |
---|---|
备选流1 | 上次未勾选【记住我】,用户名没有通过校验 |
备选流2 | 上次未勾选【记住我】,密码错误,未达5次 |
备选流3 | 上次未勾选【记住我】,密码错误,达到5次 |
备选流4 | 上次未勾选【记住我】,验证码错误 |
备选流5 | 上次勾选【记住我】,通过验证,自动登录成功 |
步骤2:生成“登录系统”的场景,如下表所示。
场景描述 | 基本流 | 备选流 |
---|---|---|
场景1:成功登录 | 基本流 | |
场景2:用户名有误 | 基本流 | 备选流1 |
场景3:密码错误(还有机会) | 基本流 | 备选流2 |
场景4:密码错误(没有机会) | 基本流 | 备选流3 |
场景5:验证码错误 | 基本流 | 备选流4 |
场景6:记住密码(成功登录) | 基本流 | 备选流5 |
步骤3: 完成登录系统的用例矩阵
编号 | 场景名称 | 记住我 | 用户名 | 密码 | 验证码 | 预期结果 |
---|---|---|---|---|---|---|
LOGIN-001 | 场景1:成功登录 | I | V | V | V | 登录成功,跳转页面 |
LOGIN-002 | 场景2:用户名有误 | I | I | n/a | n/a | 登录失败,提示:用户名不存在 |
LOGIN-003 | 场景3:密码错误(还有机会) | I | V | I | n/a | 登录失败,提示:密码错误 |
LOGIN-004 | 场景4:密码错误(没有机会) | I | V | I | n/a | 登录失败 锁屏10分钟 提示:密码错误已达上限,将锁屏10分钟 |
LOGIN-005 | 场景5:验证码错误 | I | V | V | I | 登录失败 提示:验证码错误 |
LOGIN-006 | 场景6:记住我(成功登录) | V | n/a | n/a | n/a | 登录成功,跳转页面 |
题目2 功能测试题目 2(测试用例)(15 分):
【题目描述】
请使用 等价类划分法 和 边界值分析法 对【添加用户】页面中【登录账号】输入框进行测试用例的设计,请设计 9 条用例达到该方法的有效覆盖。并把用例填写在指定的**【模拟赛1期测试用例.xlsx】用例模板中的【题目2-测试用例模板】**中。如下图所示。
【功能截图】
题目2 解题思路 功能测试用例2
使用等价类和边界值进行用例设计,根据题目需求,只需要设计9条测试用例即可
参考答案:
用例编号 | 一级功能 | 二级功能 | 前置条件 | 用例标题 | 操作步骤 | 测试数据 | 预期结果 | 用例优先级 |
---|---|---|---|---|---|---|---|---|
YHGL-DLZH-001 | 添加用户 | 登录账号 | 1. 成功登录系统 2. 进入用户管理->添加用户页面 | 添加用户成功(所有项输入正确) | 1. 输入正确的【用户名称】; 2. 输入正确的【登录账号】; 3. 输入正确的【登录密码】; 4. 点击【保存】; | 登录名称:lanqiaottt 登录账号:lanqiaot1 登录密码:123456 | 添加成功 提示:操作成功 | 高 |
YHGL-DLZH-002 | 添加用户 | 登录账号 | 1. 成功登录系统 2. 进入用户管理->添加用户页面 | 不输入【登录账号】(为空),进行添加 | 1. 输入正确的【用户名称】; 2. 输入错误的【登录账号】(为空); 3. 输入正确的【登录密码】; 4. 点击【保存】; | 登录名称:lanqiaottt2 登录账号: 登录密码:123456 | 添加失败 提示:登录账号必填 | 中 |
YHGL-DLZH-003 | 添加用户 | 登录账号 | 1. 成功登录系统 2. 进入用户管理->添加用户页面 | 输入小于3位的【登录账号】,进行添加 | 1. 输入正确的【用户名称】; 2. 输入错误的【登录账号】(小于3位); 3. 输入正确的【登录密码】; 4. 点击【保存】; | 登录名称:lanqiaottt3 登录账号:12 登录密码:123456 | 添加失败 提示:登录账号需在3-12位英文或数字组合 | 中 |
YHGL-DLZH-004 | 添加用户 | 登录账号 | 1. 成功登录系统 2. 进入用户管理->添加用户页面 | 输入大于12位的【登录账号】,进行添加 | 1. 输入正确的【用户名称】; 2. 输入错误的【登录账号】(大于12位); 3. 输入正确的【登录密码】; 4. 点击【保存】; | 登录名称:lanqiaottt4 登录账号:a123456789d123 登录密码:123456 | 添加失败 提示:登录账号需在3-12位英文或数字组合 | 中 |
YHGL-DLZH-005 | 添加用户 | 登录账号 | 1. 成功登录系统 2. 进入用户管理->添加用户页面 | 输入正确的【登录账号】(12位数字字符),进行添加 | 1. 输入正确的【用户名称】; 2. 输入【登录账号】(12位数字字符); 3. 输入正确的【登录密码】; 4. 点击【保存】; | 登录名称:lanqiaottt5 登录账号:123456789012 登录密码:123456 | 添加成功 提示:操作成功 | 高 |
YHGL-DLZH-006 | 添加用户 | 登录账号 | 1. 成功登录系统 2. 进入用户管理->添加用户页面 | 输入正确的【登录账号】(英文数字组合),进行添加 | 1. 输入正确的【用户名称】; 2. 输入错误的【登录账号】(英文数字组合); 3. 输入正确的【登录密码】; 4. 点击【保存】; | 登录名称:lanqiaottt6 登录账号:123 登录密码:123456 | 添加成功 提示:操作成功 | 高 |
YHGL-DLZH-007 | 添加用户 | 登录账号 | 1. 成功登录系统 2. 进入用户管理->添加用户页面 | 输入含有特殊符号的【登录账号】,进行添加 | 1. 输入正确的【用户名称】; 2. 输入错误的【登录账号】(登录账号含有特殊字符); 3. 输入正确的【登录密码】; 4. 点击【保存】; | 登录名称:lanqiaottt7 登录账号:ad12%啊 登录密码:123456 | 添加失败 提示:登录账号需在3-12位英文或数字组合 | 中 |
YHGL-DLZH-008 | 添加用户 | 登录账号 | 1. 成功登录系统 2. 进入用户管理->添加用户页面 3. 页面中含有已存在的登录账号 | 输入已存在的【登录账号】,进行添加 | 1. 输入正确的【用户名称】; 2. 输入错误的【登录账号】(已存在的登录账号); 3. 输入正确的【登录密码】; 4. 点击【保存】; | 登录名称:lanqiaottt8 登录账号:lanqiaot1 登录密码:123456 | 添加失败 提示:登录账号已经存在 | 中 |
YHGL-DLZH-009 | 添加用户 | 登录账号 | 1. 成功登录系统 2. 进入用户管理->添加用户页面 3.页面中含有相同的登录账号,大小写区分 | 输入已存在大小写不同的【登录账号】,进行添加 | 1. 输入正确的【用户名称】; 2. 输入错误的【登录账号】(已存在大小写不同); 3. 输入正确的【登录密码】; 4. 点击【保存】; | 登录名称:lanqiaottt9 登录账号:Lanqiaot1 登录密码:123456 | 添加失败 提示:登录账号已经存在 | 中 |
题目3 功能测试题目 3(缺陷报告) (40分)
利用所学知识,请对蓝桥后台管理中的如下 3 个页面进行测试,寻找其中预埋的 19 个缺陷,包括但不限于功能缺陷和易用性界面缺陷。 并把发现的缺陷填写在指定的**【模拟赛1期缺陷报告.xlsx】**缺陷报告模板中。
题目3 解题思路 功能测试题目 3(缺陷报告)
寻找bug时,应注意以下大点:
- 输入框不对齐 — 美观性
- 按钮换行 — 美观性
- 建议搜索框支持模糊查询 – 建议
- 插入的数据不显示在最后 – 建议
- 按钮的图标注意检查 — 美观性
- 类似个数的输入框输入负数、小数 — 功能性
- 输入框会去除空格 — 建议
参考答案
缺陷编号 | 功能名称 | 缺陷描述 | 操作步骤 | 预期结果 | 实际结果 | 缺陷级别 |
---|---|---|---|---|---|---|
LOGIN-BUG-001 | 登录 | 登录页面,用户名和密码输入框不对其,不美观 | 1. 输入url进入登录页面; 2. 查看用户和密码输入框; | 输入框和密码框应对齐 | 输入框和密码框没有对齐 | 2 |
LOGIN-BUG-002 | 登录 | 登录页面,不输入验证码,也可以正常登录 | 1. 输入url进入登录页面; 2. 输入正确的【用户名】、【密码】; 3. 点击【登录】; | 登录失败 提示:请输入验证码 | 成功登录系统 | 1 |
LOGIN-BUG-003 | 登录 | 登录页面,【记住我】文字显示不正确 | 1. 输入url进入登录页面; 2. 查看【自动登录】复选框; | 文字应显示为“记住我” | 文字显示为“自动登录” | 2 |
LOGIN-BUG-004 | 登录 | 登录页面,在输入错误的账号或密码登录时,提示信息不准确 | 1. 输入url进入登录页面; 2. 输入错误的【账号】|【密码】; 3. 点击【登录】 | 登录失败 提示:账号或密码错误 | 登录失败 提示:注册失败 | 2 |
YHGL-BUG-001 | 用户管理 | 用户管理页面,【操作】列的3个按钮没有对齐,不美观 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】; 3. 查看【操作】列; | 操作列3个按钮对齐 | 操作列3个按钮没有对齐 | 2 |
YHGL-BUG-002 | 用户管理 | 用户管理页面,模糊查询选择【停用】进行查询时,显示的数据全身启用的 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】; 3. 【用户状态】选择停用; 4. 点击【搜索】; | 页面正确显示所有 停用 的数据 | 页面显示所有 启用 的数据 | 1 |
YHGL-BUG-003 | 用户管理 | 用户管理页面,【导入】按钮没有反应 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】; 3. 点击【导入】; | 弹出导入页面 | 按钮没有反应 | 1 |
YHGL-BUG-004 | 用户管理 | 用户管理页面,【编辑】与【修改】按钮功能相同,可以省去其中一个 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】; 3. 查看【编辑】、【修改】按钮; | 功能相同,只显示其中一个即可 | 页面出现两个功能相同的按钮 | 1 |
YHGL-BUG-005 | 用户管理 | 用户管理页面,点击【删除】时,没有确认框 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】; 3. 选择数据,点击【删除】; | 页面弹出二次确认框,确认是否删除,确认则删除,取消不做操作 | 没有弹出二次确认框,直接删除了数据 | 1 |
YHGL-BUG-006 | 用户管理 | 用户管理页面,点击上方的左右跳转导航没有反应 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】; 3. 点击左上方【《《】; | 导航栏切换到前一个,页面也随着变化 | 点击按钮没有反应 | 1 |
YHGL-BUG-007 | 用户管理 | 用户管理页面,在添加到第10条记录时,分页条显示信息不准确 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】; 3. 添加十条数据; 4. 查看分页条显示文字; | 显示第 1 到第 10 条记录,总共 10 条记录 | 显示第 1 到第 11 条记录,总共 10 条记录 | 2 |
YHGL-BUG-008 | 用户管理 | 用户管理页面,点击【导出】按钮时,提示信息不正确 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】; 3. 点击【导出】; | 提示:确定导出所有用户信息吗? | 提示:确定导出所有商品信息吗? | 2 |
TJYH-BUG-001 | 添加用户 | 添加用户页面,【用户名称】可以重复 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】->【添加】; 3. 输入已存在的【用户名称】; 4. 输入正确的【登录账号】、【登录密码】; 5. 点击【保存】 | 添加失败 页面提示:用户名称已经存在 | 添加成功 提示:操作成功 | 1 |
TJYH-BUG-002 | 添加用户 | 添加用户页面,【手机号码】不是必填,不输入也能添加成功 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】->【添加】; 3. 输入错误的【手机号码】(为空); 4. 其他项输入正确; 5. 点击【保存】; | 添加失败 页面提示:手机号码必填 | 添加成功 提示:操作成功 | 1 |
TJYH-BUG-003 | 添加用户 | 添加用户页面,【登录账号】输入框,没有做任何限制 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】->【添加】; 3. 输入错误的【登录账号】(长度、中文、特殊字符); 4. 其他项输入正确; 5. 点击【保存】; | 添加失败 页面提示:登录账号3-12位且英文和数字字符 | 添加成功 提示:操作成功 | 1 |
TJYH-BUG-004 | 添加用户 | 添加用户页面,【登录账号】输入框,区分了大小写 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】->【添加】; 3. 输入已存在的【登录账号】(大小写不同); 4. 其他项输入正确; 5. 点击【保存】; | 添加失败 页面提示:登录账号已存在 | 添加成功 提示:操作成功 | 1 |
TJYH-BUG-005 | 添加用户 | 添加用户页面,【角色】复选框变成了单选框 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】->【添加】; 3. 查看【角色】复选框; | 复选框,可多选 | 单选框,不可多选 | 1 |
TJYH-BUG-006 | 添加用户 | 添加用户界面,【邮箱】做了校验 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】->【添加】; 3. 输入错误的【邮箱】; 4. 其他项输入正确; 5. 点击【保存】; | 邮箱不做校验,添加成功 提示:操作成功 | 邮箱做了校验 提示:邮箱格式不正确 | 1 |
TJYH-BUG-007 | 添加用户 | 添加用户界面,点击【关闭】时,没有关闭提示 | 1. 登录系统; 2. 点击【系统管理】->【用户管理】->【添加】; 3. 所有项输入正确; 4. 点击【关闭】; | 弹出提示框:你确定关闭吗? | 直接关闭了页面,没有提示 | 1 |
题目4 单元测试(30)分 以java为例
【源代码功能】
源代码实现的功能是:根据年龄和初赛成绩进行复赛分组。具体分组规则如下:
- 年龄大于 18 岁或初赛成绩小于 60 分,无复赛资格;
- 年龄小于等于 12 岁,初赛成绩大于等于 80 分,复赛分组为 “少儿 A 组” ;初赛成绩小于 80 分,复赛分组为 “少儿 B 组” ;
- 年龄大于 12 岁,初赛成绩大于等于 80 分,复赛分组为 “青少年 A 组” ;初赛成绩小于 80 分,复赛分组为 “青少年 B 组” 。
源代码:
package cn.lanqiao;/**
* 根据年龄和初赛成绩进行复赛分组:
* 1. 年龄大于 18 岁或初赛成绩小于 60 分,无复赛资格;
* 2. 年龄小于等于 12 岁,初赛成绩大于等于 80 分,复赛分组为“少儿 A 组”;初赛成绩小于 80 分,复赛分组为“少儿 B 组”;
* 3. 年龄大于 12 岁,初赛成绩大于等于 80 分,复赛分组为“青年年 A 组”;初赛成绩小于 80 分,复赛分组为“青少年 B 组”。
*/
public class GroupCompetition {/*** 根据年龄和初赛成绩进行复赛分组* @param age 年龄* @param score 初赛成绩* @return 分组结果*/public String grouping(int age, double score) {if(age <= 18 && score >= 60) {if(age <= 12) {if(score >= 80) {return "少儿A组";}else{return "少儿B组"; }}else{if(score >= 80) {return "青少年A组";}else{return "青少年B组";}}}else{return "无复赛资格"; }}}
测试代码:
package cn.lanqiao.unit;import org.junit.Before;
import org.junit.Test;import cn.lanqiao.GroupCompetition;/*** 单元测试* 1. 请使用 基本路径法 对被测源码 GroupCompetition 类 中的 grouping 方法设计单元测试用例。* 2. 请在下方 GroupCompetitionTest 类中填写单元测试代码。* 3. 基本路径法:又称独立路径测试,是在程序控制流图的基础上,通过分析控制结构的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。*/public class GroupCompetitionTest {static GroupCompetition group;@Beforepublic void initGroupCompetition() {group = new GroupCompetition();}@Testpublic void test01() {// TODO: 请填写 grouping 方法的单元测试代码}}
【题目要求】
- 请使用 基本路径覆盖法 设计 6 条测试用例,使被测代码的基本路径覆盖率达到 100% 。
- 请使用 Java 语言单元测试框架 Junit 编写测试代码。
- 测试代码请直接在提供的类文件 GroupCompetitionTest.java 中编写。
- 在测试中用到的断言 Assert 类务必使用 org.junit 包中的 Assert。
- 请不要修改所提供的文件名称,否则将会酌情判 0 分。
- 提交答案时,请不要修改文件的编码方式。
题目4 解题思路 单元测试
步骤1 首先画出程序的流程图
步骤2: 画出流程控制图
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
上图 计算圈复杂度: VG=P+1 = 6 有6条测试用例即可覆盖完
步骤3: 确定基本路径的集合
路径 1 :1 - 2 - 3
路径 2 :1 - 2 - 4 - 3
路径 3 :1 - 2 - 4 - 5 - 6 - 8
路径 4 :1 - 2 - 4 - 5 - 6 - 9
路径 5 :1 - 2 - 4 - 5 - 6 - 7 - 10
路径 6 :1 - 2 - 4 - 5 - 6 - 7 - 11
步骤4: 确定基本路径的集合根据基本路径编写测试用例。
测试用例编号 | age | score | 路径基本覆盖情况 |
---|---|---|---|
testcase_01 | 17 | 0 | 路径 1 |
testcase_02 | 19 | 0 | 路径 2 |
testcase_03 | 12 | 80 | 路径 3 |
testcase_04 | 12 | 70 | 路径 4 |
testcase_05 | 13 | 80 | 路径 5 |
testcase_06 | 13 | 70 | 路径 6 |
参考代码
package cn.lanqiao.unit;import static org.junit.Assert.assertEquals;import org.junit.Before;
import org.junit.Test;import cn.lanqiao.GroupCompetition;/*** 单元测试* 1. 请使用 基本路径法 对被测源码 GroupCompetition 类 中的 grouping 方法设计单元测试用例。* 2. 请在下方 GroupCompetitionTest 类中填写单元测试代码。* 3. 基本路径法:又称独立路径测试,是在程序控制流图的基础上,通过分析控制结构的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。*/public class GroupCompetitionTest {static GroupCompetition group;@Beforepublic void initGroupCompetition() {group = new GroupCompetition();}@Testpublic void test01() {assertEquals("无复赛资格", group.grouping(17, 0));}@Testpublic void test02() {assertEquals("无复赛资格", group.grouping(19, 0));}@Testpublic void test03() {assertEquals("少儿A组", group.grouping(12, 80));}@Testpublic void test04() {assertEquals("少儿B组", group.grouping(12, 70));}@Testpublic void test05() {assertEquals("青少年A组", group.grouping(13, 80));}@Testpublic void test06() {assertEquals("青少年B组", group.grouping(13, 70));}}
题目5 自动化测试题目(Python 语言)
【题目描述】
请使用 Python 编程语言,结合 PO 模式(Page Object Model 的简写 页面对象模型 )思想 ,使用 Selenium 自动化测试工具补全如下 4 个 Java 类文件中 # TODO 处缺失的代码(只填写TODO部分缺失的代码,其他内容勿改):
- login_page.py:“用户登录” 页面。
- add_user_page.py:“新增用户” 页面。
- user_manage_page.py:“用户管理” 页面。
- test_web_case.py:测试用例。
请按照用例步骤,在测试用例 test_web_case.py 文件中需通过调用 3 个 Page 类中的方法完成自动化测试代码。
【用例步骤】
具体的操作步骤如下:第十五届蓝桥杯(软件测试)模拟赛 1 期题目 - 自动化测试题目(Python 语言)( 50 分) - 蓝桥云课 (lanqiao.cn)
题目5 题目解析
login_page.py 参考代码
"""* Page1-【登录】页面* * 实现该页面中如下 3 个元素的操作代码(以下元素位置可参照题目附图)。* * 1. 输入【登录名称】* 2. 输入【登录密码】* 3. 点击【登录】按钮* 注意1:不要在 Page 类中填写 iframe 切换的代码。* 注意2:不要改动已经写好的方法名。
"""
from selenium.webdriver.common.by import By
class LoginPage:def __init__(self, driver):self.driver = driverdef input_login_name(self, loginName):# TODO 实现 【登录名称】输入的方法username = self.driver.find_element(By.NAME, 'username')username.clear()username.send_keys(loginName)def input_login_password(self, password):# TODO 实现【密码】输入的 方法pas = self.driver.find_element(By.NAME, 'password')pas.clear()pas.send_keys(password)def click_login_button(self):# TODO 实现 【登录】按钮的点击方法self.driver.find_element(By.ID, 'btnSubmit').click()
user_manage_page.py
from selenium.webdriver.common.by import By
from time import sleep"""* page2-【用户管理 】页面* * 需实现该页面中如下 10 个元素的操作代码,以下元素位置可参照题目附图:** 1. 点击【系统管理】菜单* 2. 点击【用户管理】菜单* 3. 点击【新增+】按钮* 4. 输入【登录名称】搜索框* 5. 点击【搜索】按钮* 6. 点击【重置】按钮* 7. 点击【删除】按钮* 8. 获取【分页显示信息】文本* 9. 获取【登录成功后的用户名】文本* 10. 用户【用户退出】的操作方法* 注意1:不要在 Page 类中填写 iframe 切换的代码。* 注意2:不要改动已经写好的方法名。"""
from selenium.webdriver.common.action_chains import ActionChains
class UserManagePage:def __init__(self, driver):self.driver = driverdef click_system_menu(self):# TODO 请实现点击【系统管理】菜单的操作方法self.driver.find_element(By.XPATH, '/html/body/div/nav/div[2]/div[1]/ul/li[3]/a').click()def click_user_menu(self):# TODO 请实现点击【用户管理】菜单的操作方法self.driver.find_element(By.XPATH, '/html/body/div/nav/div[2]/div[1]/ul/li[3]/ul/li[1]/a').click()def click_add_user_button(self): # TODO 请实现点击【新增+】按钮的操作方法self.driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[2]/div[1]/div[1]/div[1]/div/a[1]').click()def input_login_name(self, loginName):# TODO 请实现搜索框输入【登录名称】的操作方法self.driver.find_element(By.NAME, 'loginName').send_keys(loginName)def click_search_button(self):# TODO 请实现点击【搜索】按钮的操作方法self.driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[1]/form/div/ul/li[5]/a[1]').click()def click_reset_button(self):# TODO 请实现【重置】按钮的操作方法self.driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[1]/form/div/ul/li[5]/a[2]').click()def delete_user(self):# TODO 请实现【删除】用户的操作方法self.driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[2]/div[1]/div[2]/div[2]/table/tbody/tr/td[9]/a[2]').click()def get_username_text(self):# TODO: 实现获取【登录成功后的用户名文本】的操作方法 return self.driver.find_element(By.XPATH, '/html/body/div/div/div[1]/nav/ul/li[3]/a/span').textdef get_page_number_text(self):# TODO: 实现获取【分页显示信息】的操作方法return self.driver.find_element(By.CLASS_NAME, 'pagination-info').textdef click_login_out(self):# TODO 请实现 【用户退出】的操作方法headImg = self.driver.find_element(By.XPATH, '/html/body/div/div/div[1]/nav/ul/li[3]/a')ActionChains(self.driver).move_to_element(headImg).perform()self.driver.find_element(By.XPATH, '/html/body/div/div/div[1]/nav/ul/li[3]/ul/li[6]/a').click()
add_user.py
"""* Page3-【新增用户】页面 * 需实现该页面中如下 5 个元素的操作代码,以下元素位置可参照题目附图:** 1. 表单框输入【用户名】* 2. 表单框输入【登录账号】* 3. 表单框输入【密码】* 4. 单选框选择【普通用户】* 5. 点击【保存】按钮* 注意1:不要在 Page 类中填写 iframe 切换的代码。* 注意2:不要改动已经写好的方法名。
"""
from selenium.webdriver.common.by import By
class AddUserPage:def __init__(self, driver):self.driver = driverdef input_user_name(self, userName):# TODO 实现 表单【用户名】点击和输入 的方法self.driver.find_element(By.ID, 'userName').send_keys(userName)def input_login_name(self, loginName):# TODO 实现 表单【登录账号】点击和输入 的方法self.driver.find_element(By.ID, 'loginName').send_keys(loginName)def input_login_password(self, loginPassword):# TODO 实现 表单【密码】点击和输入 的方法pas = self.driver.find_element(By.ID, 'password')pas.clear()pas.send_keys(loginPassword)def click_role(self):# TODO 实现 表单【普通用户】单选 的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/form/div[6]/div/div/div/label[2]/div').click()def click_save_button(self):# TODO 实现 表单【保存】按钮点击的方法self.driver.find_element(By.XPATH, '/html/body/div[2]/div/button[1]').click()
test_web_case.py
import unittest
from selenium import webdriver
from selenium.webdriver.firefox.service import Servicefrom cn.lanqiao.web.login_page import LoginPage
from cn.lanqiao.web.add_user_page import AddUserPage
from cn.lanqiao.web.user_manage_page import UserManagePage
from time import sleep"""* 请按照操作步骤编写测试用例* * 用例要求:* 1.合理使用元素等待时间。* 2.请调用 Page 类中的方法实现操作步骤。* 3.合理使用 iframe 切换,iframe 切换的代码填写在此文件中。* 4.不要改动已经写好的方法名。"""class TestWebCase(unittest.TestCase):# 浏览器初始化def setUp(self):# 不要改动此处 driver 位置gecko_path = "C:\\LanQiaoTest\\project\\PythonLanqiaoTest\\driver\\geckodriver.exe"options = webdriver.FirefoxOptions()options.set_preference('security.fileuri.strict_origin_policy', False)options.set_preference('security.fileuri.origin_policy', '*')self.driver = webdriver.Firefox(service=Service(gecko_path),options=options)self.driver.implicitly_wait(10)self.driver.maximize_window()# TODO 打开被测系统的网址self.driver.get("https://6650963d19b14f2e1c92f0f6.hz-iframe-svc.simplelab.cn/")# 请在此方法中续写测试用例def test_case(self,):# 创建 LoginPage 对象login_page = LoginPage(self.driver)# 创建 UserManagePage 对象user_manage_page = UserManagePage(self.driver)# 创建 AddUserPage 对象add_user_page = AddUserPage(self.driver)# TODO 请调用以上3个实例化对象中的方法完成测试用例代码(具体请参照题目中的用例步骤描述和截图)login_page.input_login_name('admin')login_page.input_login_password('admin123')login_page.click_login_button()loginUserName = user_manage_page.get_username_text()self.assertEqual('蓝桥超管', loginUserName, '登录名不正确%s' % loginUserName)user_manage_page.click_system_menu()user_manage_page.click_user_menu()# 切换frameself.driver.switch_to.frame('iframe2')user_manage_page.click_add_user_button()# 默认文档self.driver.switch_to.default_content()self.driver.switch_to.frame(2)add_user_page.input_user_name('lanqiaotest1')add_user_page.input_login_name('lanqiaotest1')add_user_page.input_login_password('123456')add_user_page.click_role()add_user_page.click_save_button()# 切换frameself.driver.switch_to.default_content()self.driver.switch_to.frame('iframe2')pageNumText = user_manage_page.get_page_number_text()self.assertEqual('显示第 1 到第 3 条记录,总共 3 条记录', pageNumText, '添加失败:%s' % pageNumText)user_manage_page.input_login_name('lanqiaotest1')user_manage_page.click_search_button()sertchText = user_manage_page.get_page_number_text()self.assertEqual('显示第 1 到第 1 条记录,总共 1 条记录', sertchText, '搜索没有结果:%s' % sertchText)user_manage_page.delete_user()sleep(2)user_manage_page.click_reset_button()deleteText = user_manage_page.get_page_number_text()self.assertEqual('显示第 1 到第 2 条记录,总共 2 条记录', deleteText, '删除失败:%s' % deleteText)# 切换默认文档self.driver.switch_to.default_content()user_manage_page.click_login_out()# 浏览器退出def tearDown(self):if self.driver:self.driver.quit()if __name__ == "__main__":unittest.main()