文章目录
- 一、题目
- 二、代码解析
-
- 2.1AddUserPage类
- [2.2 LoginPage类](#2.2 LoginPage类)
- [2.3 UserManagementPage类](#2.3 UserManagementPage类)
- [2.4 WebCaseTest测试类](#2.4 WebCaseTest测试类)
- 三、测试运行结果截图
一、题目
题目 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;
}
}
}
三、测试运行结果截图
