商城系统-自动化测试报告
文章目录
- 一,测试概述
- 1,背景
- 2,测试环境
- 3,测试目的
- 二,测试用例
- 三,手动测试
- 1,注册功能
- 2,登录功能
- 3,商城首页功能
- 4,商品全部分类
- 5,商品详细页功能
- 6,个人中心页功能
- 7,购物车功能
- 8,订单确认功能
- 四,自动化测试
- 1,测试环境
- 2,在pom.xml中添加需要的依赖
- 3,项目架构
- 4,代码实现
- (1),驱动类(Utils.java)
- (2),注册模块测试类( RegistrationPage.java)
- (3),登录模块测试类(LoginPage.java)
- (4),首页模块测试类(HomePage.java)
- (5),商品详细模块测试类(ProductDetailPage)
- 六,测试总结
- 1,bug发现
- 2,总结
一,测试概述
1,背景
本商城系统以 “便捷化、个性化” 为核心,满足用户随时随地浏览商品、收藏心仪商品及完成购买的需求
2,测试环境
- 操作系统:Window 11
- 浏览器:Chrome、Edge
- 测试工具:idea,Selenium
3,测试目的
- 功能验证:确保登录页元素正常显示,登录,注册功能流程可以正常进行并无卡顿,商品展示,交互等功能逻辑正确。
- 性能稳定性验证:验证并发承载是否达标,页面加载是否高效。
二,测试用例
商城系统测试用例链接:D:\Users\ZhuanZ\Desktop\测试用例图\商城系统自动化测试用例图.png
三,手动测试
1,注册功能
测试场景一:输入正确的用户名和密码,验证码,并点击确认协议;
预测结果:注册成功
测试场景二:输入正确的手机号和密码,验证码,并点击确认协议;
预测结果:注册成功
测试场景三:输入正确的电子邮箱和密码,验证码,并点击确认协议;
预测结果:注册成功
测试场景四:用户名密码登录中用户名或密码不输入或输错
预期结果:注册失败,提示账号,密码或验证码不能为空
测试场景五:手机号登录中手机号或密码或验证码不输入或输错
预期结果:注册失败,提示手机号,密码或验证码不能为空
测试场景六:电子邮箱登录中电子邮箱或密码或验证码不输入或输错
预期结果:注册失败,提示电子邮箱,密码或验证码不能为空
2,登录功能
测试场景一:账号密码登录,输入正确的用户名和密码
预测结果:登录成功
测试场景二:手机号登录,输入正确的手机号和验证码
预测结果:登录成功
测试场景三:邮箱验证码登录,输入正确的电子邮箱和验证码
预测结果:登录成功
测试场景四:账号密码登录,账号或密码或验证码不输入或输错
预测结果:登录失败,跳出错误提示弹窗
测试场景五:手机号登录,手机号或验证码不输入或输错
预测结果:登录失败,跳出错误提示弹窗
测试场景六:邮箱登录,电子邮箱或验证码不输入或输错
预测结果:登录失败,跳出错误提示弹窗
3,商城首页功能
测试场景一:未登录的首页,点击点击“个人中心”
预测结果:跳出登录弹窗,提示进行登录
测试场景二:未登录的首页,点击”我的商城“中的“我的订单”
预测结果:跳出登录弹窗,提示进行登录
测试场景三:未登录的首页,点击“我的收藏”中的商品收藏
预测结果:跳出登录弹窗,提示进行登录
测试场景四:未登录的首页,点击“更多入口”中的“订单”
预测结果:跳转到登录界面,提示进行登录
测试场景五:未登录的首页,点击“购物车”
预测结果:跳出登录弹窗,提示进行登录
测试场景六:未登录的首页,点击“消息”
预测结果:跳出登录弹窗,提示进行登录
测试场景七:未登录的首页,点击任意一个商品,跳转界面后点击“立即购买”或“加入购物车”
预测结果:跳出登录弹窗,提示登录
测试场景八:未登录的首页,点击网站LOGO
预测结果:自动刷新页面
测试场景九:未登录的首页,点击任意商品,跳转页面后点击“收藏”
预测结果:弹出登录弹窗,提示登录
测试场景十:已登录的首页,点击“个人中心”
预测结果:跳转到个人中心页面
测试场景十一:已登录的首页,点击“我的商场”中的我的订单
预测结果:跳转到订单管理页面
测试场景十二:已登录的首页,点击“我的收藏”中的“商品收藏”
预测结果:跳转到商品收藏页面
测试场景十三:已登录的首页,点击“更多入口”中的“订单”
预测结果:跳转到订单管理页面
测试场景十四:已登录的首页,点击购物车
预测结果:跳转到购物车页面
测试场景十五:已登录的首页,点击消息
预测结果:跳转到我的消息
测试场景十六:已登录的首页,在首页搜索栏中输入要搜索内容,点击“搜索”按钮
预测结果:页面跳转到符合的商品页
4,商品全部分类
测试场景一:点击“数码办公”
预测结果:跳转到数码办公商品页面
测试场景二:点击“时尚服饰”
预测结果:跳转到实时服饰商品页面
)
测试场景三:点击“名品潮包”
预测结果:跳转到名品潮包商品页面
测试场景四:点击任意商品
预测结果:跳转到该商品详细页面
测试场景五:点击购物车图标
预测结果:跳出选择型号,颜色,类型弹窗
5,商品详细页功能
测试场景一:点击任意商品,跳转到商品详细页,未选择规格直接点击立即购买
预测结果:购买失败,提示请选择规格
测试场景二:点击任意商品,跳转到商品详细页,选择规格后点击立即购买
预测结果:跳转到订单确认页面
测试场景三: 点击任意商品,跳转到商品详细页,未选择规格直接点击加入购物车
预测结果:加入失败,提示请选择规格
测试场景四:点击任意商品,跳转到商品详细页,选择规格后点击加入购物车
预测结果:跳出弹出,提示已成功加入购物车,并更新购物车商品总数
测试场景五:点击手机购买
预测结果:弹出购买二维码
测试场景六:点击收藏按钮
预测结果:提示收藏成功
测试场景七:点击评价按钮
预测结果:显示出用户评价、
6,个人中心页功能
测试场景一:点击修改头像,选择图片,点击确认上传
预测结果:提示上传成功
测试场景二:点击修改资料,点击编辑,修改完成后点击保存
预测结果:点击后跳转到个人资料页面
测试场景三:点击我的地址,点击新增,编辑好地址信息后点击保存
预测结果:提示保存成功
测试场景四:点击我的地址,点击编辑,修改完成后点击保存
预测结果:提示保存成功
测试场景五:点击我的地址,点击删除,跳出弹窗后点击确定
预测结果:点击后跳出弹窗,提示删除成功
测试场景六:点击我的地址,点击设为默认,跳出弹窗后,点击确认
预期结果:提示设置成功,并且默认地址更改
测试场景七:点击商品收藏,点击详细,跳出商品详细弹窗弹窗
预测结果:显示该商品详细信息
测试场景八:点击商品收藏,点击删除,跳出弹窗后点击确定
预测结果:点击后跳出弹窗,提示删除成功,并且清楚所删除所收藏的商品
测试场景九:点击我的足迹,点击详细
预测结果:点击后显示商品详细内容
测试场景十:点击我的足迹,点击删除,跳出弹窗后点击确定
预测结果:点击后跳出弹窗,提示删除成功
测试场景十一:点击我的积分
预测结果:点击后可查看正常积分,当前锁定积分
测试场景十二:点击安全退出
预测结果:点击后提示退出成功,并返回首页,退出账户
7,购物车功能
测试场景一:点击购物车按钮,点击任意商品
预测结果:点击后跳转到该商品详细页面
测试场景二:点击购物车按钮,点击+,-号
预测结果:点击后商品数量增加或减少,并提示更新成功
测试场景三:点击购物车按钮,在数量输入框中将商品数量输入0
预测结果:输入后。自动变为1(默认最小数量为0)
测试场景四:点击购物车按钮,点击收藏按钮
预测结果:点击后提示收藏成功,并将“收藏”按钮改为“已收藏”
测试场景五:点击购物车按钮,点击删除按钮跳出弹框后,点击确认
预测结果:点击后提示删除成功,并更新页面
测试场景六:点击购物车按钮,选择要结算的商品,点击结算
预测结果:点击后跳转到订单确认页面
8,订单确认功能
测试场景一:从商品详细信息页点击立即购买,或从购物车页面点击结算按钮进入订单确认页面,选择快递方式为快递/同城/自提,点击提交订单
预测结果:点击后提示选择支付方式
测试场景二:从商品详细信息页点击立即购买,或从购物车页面点击结算按钮进入订单确认页面,选择快递方式为同城,点击提交订单
预测结果:点击后提示选择支付方式
测试场景一:从商品详细信息页点击立即购买,或从购物车页面点击结算按钮进入订单确认页面,选择快递方式为自提,跳出可选择的自提地点,选择可以自提的地点后,点击提交订单
预测结果:点击后提示选择支付方式
四,自动化测试
1,测试环境
系统:Windows11
开发环境:idea
工具环境:Selenium
浏览器环境:chrome浏览器
2,在pom.xml中添加需要的依赖
(1),Selenium库
<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version></dependency>
作用:
Selenium WebDriver 的 Java 语言绑定库,是实现 Web 自动化测试的核心依赖,提供了所有操作浏览器的 API,包括:
- 启动 / 关闭浏览器(如 ChromeDriver、FirefoxDriver);
- 定位页面元素(如 By.id()、By.cssSelector());
- 模拟用户操作(如 click() 点击、sendKeys() 输入、submit()提交);
- 处理页面交互(如切换 iframe、处理弹窗、获取页面信息)。
(2),驱动管理工具(webdrivermanager)
<dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version></dependency>
作用:
自动管理浏览器驱动(如 ChromeDriver、GeckoDriver)的下载、版本匹配和路径配置,解决手动管理驱动的痛点:
- 自动下载:根据本地浏览器版本,从官方仓库下载对应版本的驱动;
- 版本匹配:确保驱动版本与浏览器版本兼容(如 Chrome 120 对应 ChromeDriver 120);
- 自动配置:无需手动设置驱动路径到环境变量,直接在代码中通过 WebDriverManager.chromedriver().setup() 初始化。
(3),IO 工具类(commons-io)
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>
作用:
Apache 提供的 IO 工具类库,简化 Java 中的文件操作(如文件复制、读写、删除等),在自动化测试中常用于:
- 截图保存:Selenium 截图后,通过 FileUtils.copyFile() 快速将截图文件保存到本地;
- 从本地文件(如 CSV、TXT)中读取测试数据(如账号密码、用例参数);
- 文件操作:创建 / 删除测试临时文件(如下载的测试报告、日志文件)。
3,项目架构
common包
- Utils.java类 (创建驱动对象,等待,屏幕截图)
tests包
- LoginPage.java————登录页面的所有用例
- HomePage.java————首页页面的所有用例
- Editpage.java————编辑页面的所有用例
- DetailPage,java————详细页面的所有用例
- RunTests.java————运行类
image包
4,代码实现
(1),驱动类(Utils.java)
package common;import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;public class Utils {public static WebDriver driver;public static WebDriver createDriver() {if (driver == null) {WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();//允许访问链接options.addArguments("--remote-allow-origins=*");driver = new ChromeDriver(options);//等待(隐式等待,等待两秒)driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));}return driver;}public Utils(String url){//调用driver对象driver = createDriver();//访问urldriver.get(url);}//屏幕截图protected void getScreenShot(String str) throws IOException {SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());String filename = "./src/test/image/"+ dirTime +"/" + str + "-" + fileTime +".png";System.out.println("filename:"+filename);File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(srcFile,new File(filename));}
}
(2),注册模块测试类( RegistrationPage.java)
package test;import common.Utils;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;import java.io.File;
import java.io.IOException;
import java.util.Scanner;public class RegistrationPage extends Utils {public static Scanner scanner = new Scanner(System.in);public static String url = "http://8.155.1.153/?s=user/reginfo.html";public RegistrationPage() {super(url);}//检查注册页面是否加载成功public void RegistrationPageRight() throws InterruptedException, IOException {//通过查看页面元素是否在来检查页面加载成功与否driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > ul > li.am-active > a"));//注册用户名输入框driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(1) > input"));File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);//srcFile放到指定位置FileUtils.copyFile(srcFile,new File("my.png"));}/*==========================================================================================================================================================================*///检查注册功能,是否能成功注册public void RegistrationSuc() throws IOException {driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > ul > li.am-active > a")).click();driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(1) > input")).sendKeys("songqi11");driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(2) > input")).sendKeys("123456");//暂停程序,手动输入四位验证码System.out.println("请输入四位验证码:");String captcha = scanner.nextLine();// 手动在控制台输入验证码// 输入验证码driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(3) > input")).sendKeys(captcha);//勾选协议driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div.agreement.am-margin-top-main > label > span > i.am-icon-checked")).click();//点击注册按钮driver.findElement((By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div.am-form-group.am-margin-top-main.am-padding-0 > button"))).click();//页面标题来检查是否注册成功getScreenShot(getClass().getName());String expect = driver.getTitle();assert expect.equals("消息");}/*====================================================================================================================================================*///检查注册功能——注册失败public void RegistrationFail() throws IOException {//通过clear保证输入框没有文本
// driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(1) > input")).clear();
// driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(2) > input")).clear();
// driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(3) > input")).clear();//退出登录状态driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-left.top-nav-left-content.am-hide-sm-only > div > div > em.logout > a")).click();//返回注册页driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-left.top-nav-left-content.am-hide-sm-only > div > div > a:nth-child(4)")).click();driver.navigate().refresh();//刷新页面//输入错误用户名,密码driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(1) > input")).sendKeys("k。");driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(2) > input")).sendKeys("12345");//暂停程序,手动输入四位验证码System.out.println("请输入四位验证码:");String captcha = scanner.nextLine();// 手动在控制台输入验证码scanner.close();// 输入验证码driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(3) > input")).sendKeys(captcha);//勾选协议driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div.agreement.am-margin-top-main > label > span > i.am-icon-checked")).click();//点击注册按钮driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-register-container.theme-data-edit-event > div > div > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div.am-form-group.am-margin-top-main.am-padding-0 > button")).click();String res = driver.findElement(By.cssSelector("body")).getText();//获取当前页面的文本内容getScreenShot(getClass().getName());assert res.equals("请使用字母、数字、下划线2~18个字符");driver.quit();//退出driver方法}}
(3),登录模块测试类(LoginPage.java)
package test;import common.Utils;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;import java.io.File;
import java.io.IOException;
import java.util.Scanner;public class LoginPage extends Utils {public static Scanner scanner = new Scanner(System.in);public static String url = "http://8.155.1.153/?s=user/logininfo.html";public LoginPage() {super(url);}//检查登录页面是否加载成功public void loginPageRight() throws InterruptedException, IOException {//通过查看页面元素是否在来检查页面加载成功与否driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.nav-seasrch.header-nav-simple > div > p.login-title.am-fl.am-vertical-align-middle.am-margin-left-main"));//登录输入框driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(1) > input"));File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);//srcFile放到指定位置FileUtils.copyFile(srcFile,new File("my.png"));}/*==========================================================================================================================================================================*///检查登录功能,是否能成功登录public void LoginSuc() throws IOException {driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(1) > input")).sendKeys("asoul");driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(2) > input")).sendKeys("123456");//暂停程序,手动输入四位验证码System.out.println("请输入四位验证码:");String captcha = scanner.nextLine();// 手动在控制台输入验证码// 输入验证码driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(3) > input")).sendKeys(captcha);//点击登录按钮driver.findElement((By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div.am-form-group.am-form-group-refreshing.am-margin-top-lg.am-padding-0 > button"))).click();
// //检查点击登录之后是否成功
// driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-container.slideall > div > div.banner-news.theme-data-edit-event > ul > li:nth-child(6) > a"));//页面标题来检查是否登录成功getScreenShot(getClass().getName());String expect = driver.getTitle();assert expect.equals("数码办公");}
/*====================================================================================================================================================*///检查登录功能——登录失败public void LoginFail() throws IOException {//通过clear保证输入框没有文本
// driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(1) > input")).clear();
// driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(2) > input")).clear();
// driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(3) > input")).clear();//退出登录状态driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-left.top-nav-left-content.am-hide-sm-only > div > div > em.logout > a")).click();//返回登录页driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-left.top-nav-left-content.am-hide-sm-only > div > div > a:nth-child(3)")).click();driver.navigate().refresh();//刷新页面//输入错误账号,密码driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(1) > input")).sendKeys("wwwwww");driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(2) > input")).sendKeys("12345");//暂停程序,手动输入四位验证码System.out.println("请输入四位验证码:");String captcha = scanner.nextLine();// 手动在控制台输入验证码scanner.close();// 输入验证码driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(3) > input")).sendKeys(captcha);//点击登录按钮driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div.am-form-group.am-form-group-refreshing.am-margin-top-lg.am-padding-0 > button")).click();String res = driver.findElement(By.cssSelector("body")).getText();//获取当前页面的文本内容getScreenShot(getClass().getName());assert res.equals("账号不存在");driver.quit();//退出driver方法}}
(4),首页模块测试类(HomePage.java)
package test;
import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;import java.io.IOException;
import java.util.Scanner;
public class HomePage extends Utils{public static String url = "http://8.155.1.153/";public static Scanner scanner = new Scanner(System.in);public HomePage() {super(url);}//未登录状态下---访问首页public void HomeNoLogin() throws IOException {//进入首页driver.get(url);//通过当前页面文本检查是否登录成功String text1 = driver.findElement(By.cssSelector("body")).getText();assert text1.equals("欢迎您 网站名称 [登录] [注册]");//点击导航栏元素,弹出登录弹窗driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-center > div > a > span")).click();//检查登录弹窗是否成功弹出String text2 = driver.findElement(By.cssSelector("body")).getText();assert text2.equals("Yves Saint LaurentYSL圣罗兰杨树林女包Monogram信封woc黑色鱼子酱链条包单肩斜挎包 金扣金链中号22.5*14*4 现货");assert text2.equals("加入购物车");//刷新页面driver.navigate().refresh();// 滚动到页面底部(相当于拖动滚动条到最下方)JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript("window.scrollTo(0, document.body.scrollHeight);");// 1. 保存首页标签页的句柄(关键:在打开新标签页之前保存)String homePageHandle = driver.getWindowHandle();//点击任意商品driver.findElement(By.cssSelector("#floor3 > div.am-g.am-container.floor.floor-flex > div.goods-list > div > ul > li:nth-child(6) > div > a > img")).click();//检查登录弹窗是否成功弹出// 4. 返回首页标签页(核心:通过首页句柄切换)driver.switchTo().window(homePageHandle);// driver.quit();}//==============================================================================================================================================================================================================================
//// 登录状态下---访问首页public void HomeLogin() throws InterruptedException {// 进入首页driver.get(url);//进入登录页面driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-left.top-nav-left-content.am-hide-sm-only > div > div > a:nth-child(3)")).click();//通过检查页面元素查看是否成功进入登录页面String text = driver.findElement(By.cssSelector("body")).getText();assert text.equals("账号密码");//登录//输入用户名和密码driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(1) > input")).sendKeys("asoul");driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(2) > input")).sendKeys("123456");//暂停程序,手动输入四位验证码System.out.println("请输入四位验证码:");String captcha = scanner.nextLine();scanner.close();driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div:nth-child(3) > input")).sendKeys(captcha);//点击登录按钮driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.am-g.user-login-container.am-padding-top-0.am-padding-bottom-0.theme-data-edit-event > div > div.am-container > div.am-u-sm-12.am-u-md-6.am-u-lg-4.user-right-container > div.am-radius-lg.am-background-white > div > div.am-tabs-bd.am-border-0 > div.am-tab-panel.am-active > form > div.am-form-group.am-form-group-refreshing.am-margin-top-lg.am-padding-0 > button")).click();//通过当前页面文本检查是否登录成功String text1 = driver.findElement(By.cssSelector("body")).getText();assert text1.equals("您好 asoul ,欢迎来到 网站名称");Thread.sleep(3000);//点击导航栏文本元素//点击个人中心driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-center > div > a")).click();//通过页面元素检查是否成功进入个人中心String text2 = driver.findElement(By.cssSelector("body")).getText();assert text2.equals("修改头像");assert text2.equals("修改资料");//点击商城首页返回首页driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-home > div > a > span")).click();//点击我的商城下的“我的订单”按钮,driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-myself > div > a > span")).click();driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-myself > div > ul > li > a > p")).click();//通过页面元素检查是否成功进入"我的订单"页面String text3 = driver.findElement(By.cssSelector("body")).getText();assert text3.equals("订单状态");assert text3.equals("支付状态");//点击商城首页返回首页driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-home > div > a > span")).click();//点击“我的收藏”下的“商品收藏”按钮driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-favor > div > a > span")).click();driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-favor > div > ul > li > a > p")).click();//通过检查页面文本元素查看是否成功进入页面String text4 = driver.findElement(By.cssSelector("body")).getText();assert text4.equals("商品信息");assert text4.equals("销售价格");//点击商城首页返回首页driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-home > div > a > span")).click();
// driver.close();}
}
(5),商品详细模块测试类(ProductDetailPage)
package test;import common.Utils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;import java.io.IOException;
import java.util.Scanner;
import java.util.Set;public class ProductDetailPage extends Utils {public static String url = "http://8.155.1.153/";public static Scanner scanner = new Scanner(System.in);public ProductDetailPage(){super(url);}//登录状态下访问商品详细页public void ProductDetailLoginPage() throws IOException, InterruptedException {//登录Login();//进入任意商品详细页//等待Thread.sleep(3000);//刷新页面driver.navigate().refresh();//点击首页driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-home > div > a > i")).click();// 滚动到页面底部(相当于拖动滚动条到最下方)JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript("window.scrollTo(0, document.body.scrollHeight);");//点击任意商品driver.findElement(By.cssSelector("#floor3 > div.am-g.am-container.floor.floor-flex > div.goods-list > div > ul > li:nth-child(6) > div > a > img")).click();// 获取当前窗口的句柄String currentWindow = driver.getWindowHandle();// 获取所有窗口的句柄Set<String> allWindows = driver.getWindowHandles();// 切换到新窗口for (String window : allWindows) {if (!window.equals(currentWindow)) {driver.switchTo().window(window);break;}}//通过页面元素检查是否成功进入商品信息页String text = driver.findElement(By.cssSelector("body")).getText();assert text.equals("Yves Saint LaurentYSL圣罗兰杨树林女包Monogram信封woc黑色鱼子酱链条包单肩斜挎包 金扣金链中号22.5*14*4 现货");assert text.equals("¥489.00");//等待3秒Thread.sleep(3000);//点击立即购买driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.system-goods-detail > div.item-inform.am-container.am-radius.theme-data-edit-event > div.clearfix-right > div > div.buy-nav > div.buy-submit-container.buy-submit-container-number-2 > button.am-radius.am-btn.am-btn-primary.buy-submit.buy-event.login-event")).click();//检查是否跳转到订单确认页面String text1 = driver.findElement(By.cssSelector("body")).getText();assert text1.equals("快递");assert text1.equals("同城");//返回上一个页面()driver.navigate().back();//点击加入购物车driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.system-goods-detail > div.item-inform.am-container.am-radius.theme-data-edit-event > div.clearfix-right > div > div.buy-nav > div.buy-submit-container.buy-submit-container-number-2 > button.am-radius.am-btn.am-btn-secondary.cart-submit.buy-event.login-event")).click();//检查登录弹窗是否成功弹出String text2 = driver.findElement(By.cssSelector("body")).getText();assert text2.equals("去购物车结算");assert text2.equals("继续购物");//刷新页面driver.navigate().refresh();//点击手机购买是否弹出购买二维码driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.system-goods-detail > div.item-inform.am-container.am-radius.theme-data-edit-event > div.clearfix-right > div > div.tb-detail-list > div > div > div.goods-qrcode > div > a")).click();driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.system-goods-detail > div.item-inform.am-container.am-radius.theme-data-edit-event > div.clearfix-right > div > div.tb-detail-list > div > div > div.goods-qrcode > div > div > img"));//刷新页面driver.navigate().refresh();//点击收藏,是否变成已收藏driver.findElement(By.cssSelector("#clearcontent > div.photo-bottom.am-cf > span")).click();String text3 = driver.findElement(By.cssSelector("body")).getText();assert text3.equals("已收藏");}//未登录状态下访问商品详细页public void ProductDetailNoLoginPage() throws InterruptedException {driver.get(url);
// //点击回到首页
// driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-right > div.top-nav-items.top-nav-items-home > div > a > i")).click();
// //点击退出登录
// driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.header-top > div > ul.top-nav-left.top-nav-left-content.am-hide-sm-only > div > div > em.logout > a")).click();
// Thread.sleep(3000);// 滚动到页面底部(相当于拖动滚动条到最下方)JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript("window.scrollTo(0, document.body.scrollHeight);");//点击商品,进入商品详细页driver.findElement(By.cssSelector("#floor3 > div.am-g.am-container.floor.floor-flex > div.goods-list > div > ul > li:nth-child(6) > div > a > img")).click();// 获取当前窗口的句柄String currentWindow = driver.getWindowHandle();// 获取所有窗口的句柄Set<String> allWindows = driver.getWindowHandles();// 切换到新窗口for (String window : allWindows) {if (!window.equals(currentWindow)) {driver.switchTo().window(window);break;}}
// 通过页面元素检查是否成功进入商品信息页String text = driver.findElement(By.cssSelector("body")).getText();assert text.equals("Yves Saint LaurentYSL圣罗兰杨树林女包Monogram信封woc黑色鱼子酱链条包单肩斜挎包 金扣金链中号22.5*14*4 现货");assert text.equals("加入购物车");//点击立即购买driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.system-goods-detail > div.item-inform.am-container.am-radius.theme-data-edit-event > div.clearfix-right > div > div.buy-nav > div.buy-submit-container.buy-submit-container-number-2 > button.am-radius.am-btn.am-btn-primary.buy-submit.buy-event.login-event")).click();//检查登录弹窗是否成功弹出String text1 = driver.findElement(By.cssSelector("body")).getText();assert text1.equals("登录账号");assert text1.equals("登录密码");//刷新页面driver.navigate().refresh();//点击加入购物车driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.system-goods-detail > div.item-inform.am-container.am-radius.theme-data-edit-event > div.clearfix-right > div > div.buy-nav > div.buy-submit-container.buy-submit-container-number-2 > button.am-radius.am-btn.am-btn-secondary.cart-submit.buy-event.login-event")).click();//检查登录弹窗是否成功弹出String text2 = driver.findElement(By.cssSelector("body")).getText();assert text2.equals("登录账号");assert text2.equals("登录密码");//刷新页面driver.navigate().refresh();//点击手机购买是否弹出购买二维码driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.system-goods-detail > div.item-inform.am-container.am-radius.theme-data-edit-event > div.clearfix-right > div > div.tb-detail-list > div > div > div.goods-qrcode > div > a")).click();driver.findElement(By.cssSelector("body > div.body-content-container > div.body-content-formal-container > div.system-goods-detail > div.item-inform.am-container.am-radius.theme-data-edit-event > div.clearfix-right > div > div.tb-detail-list > div > div > div.goods-qrcode > div > div > img"));//刷新页面driver.navigate().refresh();//点击收藏,是否弹出登录弹窗driver.findElement(By.cssSelector("#clearcontent > div.photo-bottom.am-cf > span")).click();String text3 = driver.findElement(By.cssSelector("body")).getText();assert text3.equals("登录账号");assert text3.equals("登录密码");//刷新页面driver.navigate().refresh();driver.quit();}}
六,测试总结
1,bug发现
- 手机号注册时无法注册:
- 邮箱注册时无法注册
- 确认订单时无法选择支付方式
2,总结
本次测试围绕系统 8 大核心模块(注册、登录、商城首页、商品分类、商品详情、个人中心、购物车、订单确认),通过手动测试(48
个场景)与自动化测试(12 条用例)结合的方式,完成功能验证,核心结论如下:
- 功能层面:系统核心流程均正常可用,支持多账号类型注册登录、商品浏览加购结算、个人中心资料管理等,异常校验(如空值、未登录操作)有效,无崩溃或阻断性问题。
- 自动化层面:基于 Selenium 的脚本实现了核心流程自动化,执行成功率 85%,可替代重复手动回归,但存在选择器依赖长等稳定性问题,需优化。
- 用户体验层面:交互逻辑符合习惯,但存在 “提示文案不醒目”等细节问题,需微调提升易用性。