蓝桥杯软件测试第十五届蓝桥杯模拟赛1期题目解析

news2024/10/6 18:25:31

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:成功登录IVVV登录成功,跳转页面
LOGIN-002场景2:用户名有误IIn/an/a登录失败,提示:用户名不存在
LOGIN-003场景3:密码错误(还有机会)IVIn/a登录失败,提示:密码错误
LOGIN-004场景4:密码错误(没有机会)IVIn/a登录失败 锁屏10分钟 提示:密码错误已达上限,将锁屏10分钟
LOGIN-005场景5:验证码错误IVVI登录失败 提示:验证码错误
LOGIN-006场景6:记住我(成功登录)Vn/an/an/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;

	@Before
	public void initGroupCompetition() {
		group = new GroupCompetition();
	}

	@Test
	public void test01() {
		// TODO: 请填写 grouping 方法的单元测试代码
	}

}

【题目要求】

  1. 请使用 基本路径覆盖法 设计 6 条测试用例,使被测代码的基本路径覆盖率达到 100% 。
  2. 请使用 Java 语言单元测试框架 Junit 编写测试代码。
  3. 测试代码请直接在提供的类文件 GroupCompetitionTest.java 中编写。
  4. 在测试中用到的断言 Assert 类务必使用 org.junit 包中的 Assert。
  5. 请不要修改所提供的文件名称,否则将会酌情判 0 分。
  6. 提交答案时,请不要修改文件的编码方式。

题目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: 确定基本路径的集合根据基本路径编写测试用例。

测试用例编号agescore路径基本覆盖情况
testcase_01170路径 1
testcase_02190路径 2
testcase_031280路径 3
testcase_041270路径 4
testcase_051380路径 5
testcase_061370路径 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;

	@Before
	public void initGroupCompetition() {
		group = new GroupCompetition();
	}

	@Test
	public void test01() {
		assertEquals("无复赛资格", group.grouping(17, 0));
	}
	
	@Test
	public void test02() {
		assertEquals("无复赛资格", group.grouping(19, 0));
	}
	
	@Test
	public void test03() {
		assertEquals("少儿A组", group.grouping(12, 80));
	}
	
	@Test
	public void test04() {
		assertEquals("少儿B组", group.grouping(12, 70));
	}
	
	@Test
	public void test05() {
		assertEquals("青少年A组", group.grouping(13, 80));
	}
	
	@Test
	public 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 = driver

    
    def 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 = driver

    def 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').text
    
    
    def get_page_number_text(self):
        # TODO: 实现获取【分页显示信息】的操作方法
        return self.driver.find_element(By.CLASS_NAME, 'pagination-info').text
    
    
    def 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 = driver

    
    
    def 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 Service

from 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()
        
        # 切换frame
        self.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()
        
        # 切换frame
        self.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()       

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

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

相关文章

优化查询性能:DolphinDB 时间类型数据比较规则详解

在数据库中&#xff0c;时间是一种常见的数据类型。在处理时间数据时&#xff0c;比较操作是非常常见的需求。然而&#xff0c;在不同的场景下&#xff0c;对时间类型数据进行比较时应用的规则不同。本文将从 DolphinDB 支持的时间类型开始&#xff0c;由浅入深分别介绍时间类型…

鸿蒙轻内核A核源码分析系列六 MMU协处理器(2)

3、MMU汇编代码 在arch\arm\arm\include\arm.h文件中&#xff0c;封装了CP15协处理器相关的寄存器操作汇编函数。我们主要看下MMU相关的部分。 3.1 CP15 C2 TTBR转换表基地址寄存器 代码比较简单&#xff0c;结合下图&#xff0c;自行查看即可。该图来自《ARM Cortex-A9 Tec…

minIo ubuntu单节点部署

资源准备 minio二进制包 下载地址:https://dl.min.io/server/minio/release/linux-amd64/minio ubuntu-单节点部署 选择一台ubuntu18.04机器10.253.9.41、intel 或者 amd 64位处理器 上传minio到~目录 sudo cp minio /usr/local/bin/ sudo chmod x /usr/local/bin/minio 设…

python pip下载镜像

官网&#xff1a;python https://pypi.python.org/simple 阿里&#xff1a; pip install -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com packagename 腾讯&#xff1a; pip install -i https://mirrors.cloud.tencent.com/pypi/simple --tr…

CC攻击的有效应对方案

随着互联网的发展&#xff0c;网络安全问题愈发突出。CC攻击&#xff08;Challenge Collapsar Attack&#xff09;&#xff0c;一种针对Web应用程序的分布式拒绝服务&#xff08;DDoS&#xff09;攻击方式&#xff0c;已经成为许多网络管理员和网站拥有者不得不面对的重大挑战。…

reGeorg隐秘隧道搭建

reGeorg隐秘隧道搭建 【实验目的】 通过学习reGeorg与Proxifier工具使用&#xff0c;实现外网攻击端连接内网主机远程桌面。 【知识点】 python、reGeorg、proxifier。 【实验原理】 在内网渗透中&#xff0c;由于防火墙的存在&#xff0c;导致无法对内网直接发起连接&#xff…

Java中List流式转换为Map的终极指南

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Java编程中&#xff0c;经常需要将一个List对象转换为另一个Map对象。这可能是因为需要根据List中的元素的某些属性来创建一个新的键值对集合。在本文中&#xff0c;我将向您展示如何使用Java 中的流式API轻松地实…

机器学习:数据分布的漂移问题及应对方案

首先&#xff0c;让我们从一位高管告诉我的一个故事开始&#xff0c;很多读者可能对此感同身受。 大约两年前&#xff0c;他的公司聘请了一家咨询公司开发一个机器学习模型&#xff0c;帮助他们预测下周每种食品杂货需要多少&#xff0c;以便他们可以相应地补货。这家咨询公司…

【SQL边干边学系列】08高级问题-4

文章目录 前言回顾高级问题48.客户分组49.客户分组-修复null50.使用百分比的客户分组51.灵活的客户分组 答案48.客户分组49.客户分组-修复null50.使用百分比的客户分组51.灵活的客户分组 未完待续 前言 该系列教程&#xff0c;将会从实际问题出发&#xff0c;边干边学&#xff…

qmt量化交易策略小白学习笔记第29期【qmt编程之获取行业概念数据--如何下载板块分类信息及历史板块分类信息】

qmt编程之获取行业概念数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取行业概念数…

在typora中利用正则表达式,批量处理图片

一&#xff0c;png格式 在 Typora 中批量将 HTML 图片标签转换为简化的 Markdown 图片链接&#xff0c;且忽略 alt 和 style 属性&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Typora 并加载你的文档。按下 Ctrl H&#xff08;在 Windows/Linux 上&#xff09;或 Cmd…

【NOI-题解】1389 - 数据分析1750 - 有0的数1457 - 子数整除1121 - “倒”数1962. 数值计算

文章目录 一、前言二、问题问题&#xff1a;1389 - 数据分析问题&#xff1a;1750 - 有0的数问题&#xff1a;1457 - 子数整除问题&#xff1a;1121 - “倒”数问题&#xff1a;1962. 数值计算 三、感谢 一、前言 本章节主要对循环中带余除法部分题目进行讲解&#xff0c;包括…

CV预测:快速使用LeNet-5卷积神经网络

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

2024年先进算法与人机交互国际会议(ICCHSE 2024)

2024 International Conference on Advanced Algorithms and Human Computer Interaction 【1】大会信息 会议简称&#xff1a;ICAAHIE 2024 大会时间&#xff1a;2024-07-19 大会地点&#xff1a;中国桂林 截稿时间&#xff1a;2024-07-05(以官网为准&#xff09; 审稿通知&a…

Ajax的应用

1. Ajax Ajax是Asynchronous Javascript And XML&#xff08;异步JavaScript和XML&#xff09;的缩写。 Ajax技术描述了使用脚本操纵HTTP和Web服务器进行数据交换&#xff0c;在页面不刷新的情况下&#xff0c;实现页面的局部更新。 重点&#xff1a; Ajax 是一种在无需重新加…

服务器再升级!64线程服务器震撼上线,全新渲染体验等你来解锁

秉承着 “科技赋能创意&#xff0c;连接创造价值”的使命&#xff0c; 经过精心的策划和筹备&#xff0c; 蓝海创意云 64线程服务器&#xff0c; 以全新的面貌&#xff0c;优惠的价格&#xff0c; 与大家见面了&#xff01; 诚邀您一起&#xff0c;解锁全新的渲染体验&am…

如何利用AI绘图,生成同一人物(最好为二次元)的不同动作和不同表情的图片?

Ai绘画有一个很现实的问题&#xff0c;要保证每次画出的都是同一个人物的话&#xff0c;很费劲。 Midjourney就不必说了&#xff0c;人物的高度一致性一直得不到很好的解决。而在Stable Diffusion&#xff08;SD&#xff09;中&#xff0c;常用办法是通过同一个Seed值&#xf…

Android低代码开发 - InputMenuPanelItem详解

我们知道MenuPanel是一个菜单面板容器&#xff0c;它里面可以放各式各样的菜单和菜单组。今天我们就来详细讲解输入菜单这个东西。 InputMenuPanelItem源码 package dora.widget.panel.menuimport android.content.Context import android.text.Editable import android.text…

KEYSIGHT N1000A 采样示波器 支持哪些类型的示波器模块?

N1000A Keysight 高性能宽带宽示波器&#xff0c;它支持多种类型的模块&#xff0c;这些模块可以根据用户的需求进行选择和配置&#xff0c;以执行精密的光学、电气和TDR/TDT/S参数分析。以下是一些支持的模块类型&#xff1a; 光通信模块&#xff1a;这些模块支持深入的收发信…

量化、剪枝、蒸馏,这些大模型黑话到底说了些啥?

扎克伯格说&#xff0c;Llama3-8B还是太大了&#xff0c;不适合放到手机中&#xff0c;有什么办法&#xff1f; 量化、剪枝、蒸馏&#xff0c;如果你经常关注大语言模型&#xff0c;一定会看到这几个词&#xff0c;单看这几个字&#xff0c;我们很难理解它们都干了些什么&…