蓝桥杯自动化测试模拟1期答案及代码解析(完整版)

文章目录

一、题目

题目 II:自动化测试题目

本题总分:50 分

【前期准备】

请再次双击被测系统的 run.bat 脚本恢复原始数据并重新启动被测系统,然后在火狐

浏览器中输入被测系统的访问地址:

 访问地址:http://localhost:8090

 用户名:lqb_test

 密 码:123456

注意:在做自动化题目时,最好重新启动被测系统,以免有脏数据干扰。如果重启后

无法正常登录,请深度刷新浏览器再登录,或者重新解压缩被测系统源码包再次进行

一键启动,启动后也再次刷新浏览器。

【题目描述】

请使用 Java 编程语言,结合 PO 模式(Page Object Model,页面对象模型)思想,实现业务与测试用例分离。要求使用 Selenium 自动化测试工具补全如下 4 个 Java 类文件中 TODO 处缺失的代码:

 Page1-登录 Page 类:LoginPage.java

 Page2-用户管理 Page 类:UserManagementPage.java

 Page3-新增用户 Page 类:AddUserPage.java

 测试用例类:WebCaseTest.java

请按照【用例步骤】中的描述,在测试用例 WebCaseTest.java 文件中调用 3 个

Page 类中相应的方法完成自动化测试代码。

【用例步骤】

具体的操作步骤如下:

第 1 步:设置浏览器驱动,并输入被测系统网址(非考点,已提供)。

第 2 步:在【登录】页面调用 LoginPage.java 中包含的 3 个操作方法:

 ①输入【用户名】方法

 ②输入【密码】方法

 ③点击【登录】方法

依次操作步骤如下:①输入【用户名】->②输入【密码】->③点击【登录】,完成登

录步骤。如下图所示:

第 3 步:登录成功后,在【用户管理】页面 UserManagementPage.java 中完成如下操作代码:

 ①获取登录后的【超级测试用户】文本,插入断言。

 ②点击【系统管理】菜单。

 ③点击【用户管理】菜单。

 ④点击【新增】按钮,进入新增用户界面。

以上 4 个步骤的操作顺序,如下图序号所示:

第 4 步:在【新增用户】页面 AddUserPage.java 中完成如下操作步骤的代码:

 ①定位【登录名称】文本框输入"Jessica"。

 ②定位【用户姓名】文本框输入"张三"。

 ③定位【角色】下拉框选择"销售代表"。

 ④定位【机构】下拉框选择"市级经销商"。

 ⑤定位【职位】文本框输入"主管"。

 ⑥定位【是否经理】下拉框选择"否"。

 ⑦定位【电话号码】文本框输入"13588888888"。

 ⑧定位【电子邮箱】文本框输入"jessica@163.com"。

⑨定位【排序】文本框输入"13"。

 ⑩定位【备注】文本框输入"新成员"。

 ⑪点击【保存】按钮。

以上步骤如下图所示:

第 5 步:完成新增用户后,在【用户管理】页面 UserManagementPage.java 中继续完成如下操作步骤的代码:

 ① 定位【用户姓名】文本框输入"张三"。

 ② 点击【查询】按钮。

 ③ 获取分页信息栏中的数据,插入断言。

 ④ 选中【登录名称】为"Jessica"的数据前面的复选框。

 ⑤ 点击【批量删除】按钮。

以上操作步骤如下图所示:

第 6 步:继续在【用户管理】页面 UserManagementPage.java 中完成【确定】删除的操作代码,如下图所示:

二、代码解析

2.1AddUserPage类

java 复制代码
package cn.lanqiao.web;

import java.time.Duration;

import org.openqa.selenium.*;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
/**
 * 	新增用户页面类,需实现该页面中如下 11 个方法的操作代码:
 *  
 * 1. 定位【登录名称】文本框,通过参数 loginName 输入信息的方法
 * 2. 定位【用户姓名】文本框,通过参数 username 输入信息的方法
 * 3. 定位【角色】下拉框,点击选择"销售代表"的方法
 * 4. 定位【机构】下拉框,点击选择"省级代理"的方法
 * 5. 定位【职位】文本框,通过参数 job 输入信息的方法
 * 6. 定位【是否经理】下拉框,点击选择"否"的方法
 * 7. 定位【电话号码】文本框,通过参数 telphone 输入信息的方法
 * 8. 定位【电子邮箱】文本框,通过参数 email 输入信息的方法
 * 9. 定位【排序】文本框,通过参数 sort 输入信息的方法
 * 10. 定位【备注】文本框,通过参数 remaker 输入信息的方法
 * 11. 点击【保存】按钮的方法
 *   
 * 	注意:不要改动已定义的方法名、参数列表。
 *  注意:不得在本类中编写断言、选项卡切换、iframe切换等业务流程代码!!!
 *  提醒:提交答案前,请确认是否存在多余的导包动作,如存在,请删除!!!
 *  注意:确保当前文件和所有的 Page 文件都处于 JavaLanqiaoTest\\test\\cn\\lanqiao\\web 目录下
 */
public class AddUserPage {
	
	// 声明驱动对象
	private WebDriver driver;
	
	// 构造方法
	public AddUserPage(WebDriver driver) {
		this.driver = driver;
	}
	
    public void inputLoginName(String loginName)  {
    	// TODO 请实现定位【登录名称】文本框以及填充信息的操作
    	driver.findElement(By.xpath("//input[@id='loginName']")).sendKeys(loginName);
    }
    
    public void inputUsername(String username) {
    	// TODO 请实现定位【用户姓名】文本框以及填充信息的操作
    	driver.findElement(By.xpath("//input[@id='username']")).sendKeys(username);
    }
  
    public void selectRole() {
    	// TODO 请实现定位【角色】下拉框,点击选择"销售代表"的方法
    	WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(3));
    	wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[starts-with(text(),'请选择角色')]"))).click();
    	wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//li[contains(text(),'销售代表')]"))).click();
    
    	
    }
    
    public void selectOrgName() {
    	// TODO 请实现定位【机构】下拉框,点击选择"市级经销商"的方法
		WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(3));
		wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//span[starts-with(text(),'请选择机构')]"))).click();
		wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//span[@title='市级经销商']"))).click();
    }
    
    
    public void inputJob(String job) {
    	// TODO 请实现定位【职位】文本框以及填充信息的操作
    	
    	driver.findElement(By.xpath("//input[@id='position']")).sendKeys(job);
    }



    public void selectManager() {
    	// TODO 请实现定位【经理】下拉框,点击选择"否"的方法
		WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(3));
		wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[starts-with(text(),'请选择是否经理')]"))).click();
		wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//li[contains(text(),'否')]"))).click();
    }

    public void inputTelphone (String telphone) {
    	// TODO 请实现定位【电话】文本框以及填充信息的操作
    	
    	driver.findElement(By.xpath("//input[@id='phonenum']")).sendKeys(telphone);
    }
    
    public void inputEmail (String email) {
    	// TODO 请实现定位【邮箱】文本框以及填充信息的操作
    	driver.findElement(By.xpath("//input[@id='email']")).sendKeys(email);
    }
    
    public void inputSort (String sort) {
    	// TODO 请实现定位【排序】文本框以及填充信息的操作
    	
    	driver.findElement(By.xpath("//input[@placeholder='请输入排序,只能是数字']")).sendKeys(sort); 
    }
    
    public void inputRemark (String remark) {
    	// TODO 请实现定位【备注】文本框以及填充信息的操作    	
    	driver.findElement(By.xpath("//textarea[@id='description']")).sendKeys(remark);
    	
    }
    
    public void clickOkButton() {
    	// TODO 请实现点击弹框上【保存】按钮操作
    	
    	driver.findElement(By.xpath("//button[contains(.,'保 存')]")).click();
    }
	
}

2.2 LoginPage类

java 复制代码
package cn.lanqiao.web;

import org.openqa.selenium.*;

/**
 * 登录页面类,需实现该页面中如下 3 个方法的操作代码:
 * 
 * 1. 实现 通过参数输入【用户名】的操作代码
 * 2. 实现 通过参数输入【密码】的操作代码
 * 3. 实现 点击【登录】 按钮操作代码
 * 
 * 	注意:不要改动已定义的方法名、参数列表。
 *  注意:不得在本类中编写断言、选项卡切换、iframe 切换等业务流程代码!!!
 *  提醒:提交答案前,请确认是否存在多余的导包动作,如存在,请删除!!!
 *  注意:确保当前文件和所有的 Page 文件都处于 JavaLanqiaoTest\\test\\cn\\lanqiao\\web 目录下
 */

public class LoginPage {
	
	// 声明驱动对象
	private WebDriver driver;

	// 构造方法
    public LoginPage(WebDriver driver){
        this.driver = driver;
    }

//   
    public void inputLoginName(String username){
    	// TODO 请实现 通过参数输入【用户名】的操作代码
		driver.findElement(By.xpath("//input[@id='loginName']")).sendKeys(username);

    }


    public void inputLoginPassword(String password){
    	// TODO 请实现 通过参数输入【密码】的操作代码
    	driver.findElement(By.xpath("//input[@id='password']")).sendKeys(password);

    }
    
	
    public void clickLoginButton() {
    	// TODO 请实现点击【登录】 按钮操作代码
    	driver.findElement(By.xpath("/html/body/div[1]/div/div[1]/div/div[2]/div[2]/div/form/div[5]/div/div/span/button")).click();
    }

}

2.3 UserManagementPage类

java 复制代码
package cn.lanqiao.web;

import org.openqa.selenium.*;

/**
 *	用户管理页面类,需实现该页面中如下 10 个方法的操作代码:
 *  
 * 1. 获取登录后的【超级测试用户】文本值的方法
 * 2. 点击【系统管理】 菜单的方法
 * 3. 点击【用户管理】 菜单的方法
 * 4. 点击【新增】按钮的方法
 * 5. 获取分页栏文本信息的方法
 * 6. 实现 通过参数输入查询表单中【登录名称】的操作代码
 * 7. 实现 点击【查询】 按钮操作代码
 * 8. 用户列表中点击选中【用户姓名】为 "张三" 多选框的方法
 * 9. 实现点击【批量删除】按钮的方法
 * 10.实现点击确认删除提示框【确定】按钮的方法
 * 
 * 	注意:不要改动已定义的方法名、参数列表。
 *  注意:不得在本类中编写断言、选项卡切换、iframe切换等业务流程代码!!!
 *  提醒:提交答案前,请确认是否存在多余的导包动作,如存在,请删除!!!
 *  注意:确保当前文件和所有的 Page 文件都处于 JavaLanqiaoTest\\test\\cn\\lanqiao\\web 目录下
 */
public class UserManagementPage{
	// 声明驱动对象
	private WebDriver driver;

	// 构造方法
	public UserManagementPage(WebDriver driver) {
		this.driver = driver;
	}
	
	
    public String getNicknameText() {
    	// TODO 请实现获取用户名【超级测试用户】文本的操作,注意需要修改返回值。
		
    	return driver.findElement(By.xpath("/html/body/div[1]/section/section/header/div/div/span[4]/span")).getText();
	}
    
//           
    public void clickSystemManagementMenu(){
	   	// TODO 请实现点击【系统管理】菜单操作
    	driver.findElement(By.xpath("//div[contains(.,'系统管理') and @aria-haspopup='true']")).click();
	}

    public void clickUserManagementMenu(){
	   	// TODO 请实现点击【用户管理】 菜单操作
    	driver.findElement(By.xpath("//a[@title='用户管理']")).click();
	}
	

	public void clickAddButton() {
		// TODO 请实现点击【新增】 按钮
		driver.findElement(By.xpath("//button[contains(.,'新增')]")).click();
	}
	

	
	public String getNumText() {
		// TODO 请实现获取用户管理界面的分页栏文本信息的操作,注意需要修改返回值。
		
		return driver.findElement(By.xpath("//li[contains(text(),'当前第')]")).getText();
	}
	

    public void inputQueryUserName(String username){
    	// TODO 请实现在查询表单中通过参数输入【登录名称】的操作代码
		driver.findElement(By.xpath("//input[@placeholder='输入用户姓名模糊查询']")).sendKeys(username);

    }
    
    public void clickQueryButton() {
    	// TODO 实现 点击【查询】 按钮操作代码
		driver.findElement(By.xpath("//button[contains(.,'查')]")).click();
    }
    
    
    public void clickUsernameCheckbox() {
    	// TODO 请实现勾选【查询结果】对应的多选框操作
		driver.findElement(By.xpath("/html/body/div[1]/section/section/main/div[2]/div/div/div/div/div[3]/div/div/div/div/div/div/div[2]/table/tbody/tr/td[1]/span/label/span/input")).click();
    }
    

    public void clickDeleteButton() {
    	// TODO 请实现点击弹框【批量删除】按钮操作
		driver.findElement(By.xpath("//button[contains(.,'批量删除')]")).click();
    }

    public void clickOkButton() {
    	// TODO 请实现点击确认删除提示框【确定】按钮操作
		driver.findElement(By.xpath("//button[contains(.,'确')]")).click();

    }
}

2.4 WebCaseTest测试类

java 复制代码
package cn.lanqiao.web;

import java.time.Duration;

import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.*;



/**
 * 	测试用例类,请按照操作步骤编写测试用例,要求如下:
 * 
 * 1. 合理使用元素的 8 种定位方式
 * 2. 合理使用时间等待方法
 * 3. 合理使用键盘鼠标控制以及页面截图等操作
 * 4. 请调用 Page 类中的方法实现操作步骤
 * 5. 不要改动已定义的方法名
 * 
 * 注意:确保当前文件和所有的 Page 文件都处于 JavaLanqiaoTest\\test\\cn\\lanqiao\\web 目录下
 */
public class WebCaseTest {

	private WebDriver driver = null;

	// 浏览器初始化
	@Before
	public void setUp() {
		//设置火狐驱动路径,不要改动此处 driver 位置,此处非考点
		System.setProperty("webdriver.gecko.driver","driver\\geckodriver.exe");
		
		FirefoxOptions options = new FirefoxOptions();
		//允许跨域访问,此处非考点
		options.addPreference("security.fileuri.strict_origin_policy", false);
		options.addPreference("security.fileuri.origin_policy", "*");

		driver = new FirefoxDriver(options);
		//隐式等待,此处非考点
		driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

		driver.manage().window().maximize();

		//填写被测站点地址,此处非考点
		driver.get("http://localhost:8090");

	}

	
	@Test
	public void testBrowser() throws Exception{
		
	    // 实例化 Page 类对象,此处非考点
		LoginPage loginPage = new LoginPage(driver);
		UserManagementPage userManagementPage = new UserManagementPage(driver);
		AddUserPage addUserPage = new AddUserPage(driver);
		// TODO 考点:请参照题目中【用例步骤】补全以下代码,调用 3 个Page类中的方法实现。
		loginPage.inputLoginName("lqb_test");
		loginPage.inputLoginPassword("123456");
		loginPage.clickLoginButton();
		Thread.sleep(2000);
		Assert.assertEquals("超级测试用户", userManagementPage.getNicknameText());
		userManagementPage.clickSystemManagementMenu();
		userManagementPage.clickUserManagementMenu();
		userManagementPage.clickAddButton();
		Thread.sleep(2000);
		addUserPage.inputLoginName("Jessica");
		addUserPage.inputUsername("张三");
		Thread.sleep(2000);
		addUserPage.selectRole();
		addUserPage.selectOrgName();
		addUserPage.inputJob("主管");
		Thread.sleep(2000);
		addUserPage.selectManager();
		Thread.sleep(2000);
		addUserPage.inputTelphone("13588888888");
		addUserPage.inputEmail("Jessica@163.com");
		addUserPage.inputSort("13");
		addUserPage.inputRemark("新成员");
		Thread.sleep(2000);
		addUserPage.clickOkButton();
		Thread.sleep(2000);
		userManagementPage.inputQueryUserName("张三");
		Thread.sleep(2000);
		userManagementPage.clickQueryButton();
		Thread.sleep(2000);
		Assert.assertEquals("当前第1页,共1条",userManagementPage.getNumText());
		Thread.sleep(2000);
		userManagementPage.clickUsernameCheckbox();
		userManagementPage.clickDeleteButton();
		userManagementPage.clickOkButton();
	}
	
	
	// 浏览器退出,资源释放
	@After
	public void tearDown() {
		if(driver!=null) {
			driver.quit();
			driver = null;
		}
	}
}

三、测试运行结果截图

相关推荐
G皮T3 小时前
【OpenClaw】思路转变:从 “传统UI测试” 到 “AI驱动的UI测试”
自动化测试·人工智能·ai·agent·测试·ui测试·openclaw
你撅嘴真丑11 小时前
[蓝桥杯 2025 省 B] 生产车间 与 装修报价
职场和发展·蓝桥杯
Tanecious.12 小时前
蓝桥杯备赛:Day4-P9749 公路
c++·蓝桥杯
Tanecious.13 小时前
蓝桥杯备赛:Day3-P1102 A-B 数对
c++·蓝桥杯
Tanecious.14 小时前
蓝桥杯备赛:Day3-P1918 保龄球
c++·蓝桥杯
Tanecious.18 小时前
蓝桥杯备赛:Day1-P1101 单词方阵
c语言·c++·蓝桥杯
进击的确定19 小时前
蓝桥杯BFS/DFS
蓝桥杯·深度优先·宽度优先
仟濹21 小时前
【算法打卡day37(2026-04-04 周六)】DFS专项训练4-枚举专项训练 1-全部是蓝桥杯真题
算法·蓝桥杯·深度优先
沙雕不是雕又菜又爱玩1 天前
P12121 [蓝桥杯 2024 省 B 第二场] 进制(C++)
蓝桥杯