商店售货系统Web测试
项目的功能:
-
管理员的注册与登录功能
-
商品的上架、更新以及商品浏览功能
-
顾客的购买业务
-
浏览订单的功能和订单项的处理
针对这些功能 设计测试用例
公共类
这个类中存放驱动对象、验证参数合法性的数据、提供截图的功能
package com.djl.autotest_item.comment;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class CommonDriver {
//创建驱动对象并返回
private static ChromeDriver driver;
public static ChromeDriver getDriver(){
if(driver == null){
driver = new ChromeDriver();
//添加隐式等待
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
}
return driver;
}
public static void 上架空格语句(){
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/div[3]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/div[4]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/div[5]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/div[6]/input")).sendKeys(" ");
}
/**
* 只有库存 价格 折扣 是必须是数字的,其他字段都是String类型
* 并且库存 折扣 是整数 价格 可以是 小数
*/
public static void 上架商品各字段的合法性(){
String[] kucun = {"汉字","10.9","0","josia","-10"};
String[] jiage = {"汉字","josia","j+","*()"};
String[] zhekou = {"汉字","10.9","josia","10%"};
ThreadLocalRandom random = ThreadLocalRandom.current();
//库存
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys(kucun[random.nextInt(0,5)]);
//价格
driver.findElement(By.xpath("/html/body/div[2]/form/div[5]/input")).sendKeys(jiage[random.nextInt(0,4)]);
//折扣
driver.findElement(By.xpath("/html/body/div[2]/form/div[6]/input")).sendKeys(zhekou[random.nextInt(0,4)]);
}
/**
* 获取屏幕截图
*
*/
public void getScr(String str) throws IOException {
List<String> times = getTime();
String fileName = "./src/test/auto-"+times.get(1) + File.separator + str + "-" + times.get(0) + ".png";
File srcFile = driver.getScreenshotAs(OutputType.FILE);
//把屏幕截图放在指定路径下
FileUtils.copyFile(srcFile,new File(fileName));
}
private List<String> getTime() {
//文件名格式20220821-时分秒+毫秒
SimpleDateFormat sim1 = new SimpleDateFormat("yyyyMMdd-HHmmssSS");
//文件夹 名称 格式2022-0801
SimpleDateFormat sim2 = new SimpleDateFormat("yyyy-MM-dd");
String fileName = sim1.format(System.currentTimeMillis());
String dirName = sim2.format(System.currentTimeMillis());
List<String> list = new ArrayList<>();
list.add(fileName); // 0是文件名
list.add(dirName); //1 是 文件夹名称
return list;
}
}
首页的Web测试
根据设计好的测试用例来进行测试
为了保证自动化运行的顺序,使用@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
注解和@Order()
进行顺序的控制
package com.djl.autotest_item.Test;
import com.djl.autotest_item.comment.CommonDriver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class IndexTest extends CommonDriver {
private static ChromeDriver driver = getDriver();
/**
* 在每次执行方法之前,都先跳到首页
*/
@BeforeAll
static void getUrl(){
driver.get("http://127.0.0.1:8080/index.html");
}
/**
* 检验首页是否正确展示
*/
@Test
@Order(1)
void checkIndex1() throws Exception{
String center = driver.findElement(By.xpath("/html/body/div[2]/div[1]")).getText();
String title = driver.findElement(By.xpath("/html/body/div[1]/h1")).getText();
String zhuce = driver.findElement(By.xpath("/html/body/div[1]/a[1]")).getText();
String denglu = driver.findElement(By.xpath("/html/body/div[1]/a[2]")).getText();
String shangjia = driver.findElement(By.xpath("/html/body/div[1]/a[3]")).getText();
String liulangoods = driver.findElement(By.xpath("/html/body/div[1]/a[4]")).getText();
String gengxin = driver.findElement(By.xpath("/html/body/div[1]/a[5]")).getText();
String liulandingdan = driver.findElement(By.xpath("/html/body/div[1]/a[6]")).getText();
String buy = driver.findElement(By.xpath("/html/body/div[1]/a[7]")).getText();
//断言 校验文本是否符合预期
Thread.sleep(2000);
Assertions.assertEquals("请选择对应的功能进行操作。",center);
Assertions.assertEquals("收银台",title);
Assertions.assertEquals("注册账号",zhuce);
Assertions.assertEquals("切换账号",denglu);
Assertions.assertEquals("上架商品",shangjia);
Assertions.assertEquals("浏览商品",liulangoods);
Assertions.assertEquals("更新商品",gengxin);
Assertions.assertEquals("浏览订单",liulandingdan);
Assertions.assertEquals("购买商品",buy);
}
/**
* 注册账号页面
*/
@Test
@Order(2)
void zhuce(){
driver.findElement(By.xpath("/html/body/div[1]/a[1]")).click();
String register = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("注册",register);
}
/**
* 切换账号页面
*/
@Test
@Order(3)
void qiehuan(){
driver.findElement(By.xpath("/html/body/div[1]/a[2]")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value);
}
/**
* 上架商品页面
*/
@Test
@Order(4)
void shangjia(){
driver.findElement(By.xpath("/html/body/div[1]/a[3]")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("上架商品",value);
}
/**
* 未登录
* 浏览商品页面
*/
@Test
@Order(5)
void liulanGoods(){
driver.findElement(By.xpath("/html/body/div[1]/a[4]")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
// Thread.sleep(5000);
Assertions.assertEquals("用户未登录,无法进行该操作",value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value1);
}
/**
*
* 更新商品页面
*/
@Test
@Order(6)
void gengxin(){
driver.findElement(By.xpath("/html/body/div[1]/a[5]")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("更新商品",value);
}
/**
* 用户未登录
* 浏览订单页面
*/
@Test
@Order(7)
void liulan() throws InterruptedException {
driver.findElement(By.xpath("/html/body/div[1]/a[6]")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
// Thread.sleep(5000);
Assertions.assertEquals("用户未登录,无法进行该操作",value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value1);
}
/**
* 购买商品页面
*/
@Test
@Order(8)
void buy(){
driver.findElement(By.xpath("/html/body/div[1]/a[7]")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("购买商品",value);
}
/**
* 用户登录
* 浏览订单页面
*/
@Test
@Order(9)
void liulanLodin() throws InterruptedException {
//用户登录
driver.findElement(By.xpath("/html/body/div[1]/a[2]")).click();
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys("段佳禄");
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys("123456");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
//浏览订单操作
driver.findElement(By.xpath("/html/body/div[1]/a[6]")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/div[1]/h2")).getText();
Assertions.assertEquals("浏览订单",value);
// Thread.sleep(2000);
//浏览商品操作
driver.findElement(By.xpath("/html/body/div[1]/a[4]")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/div[1]/h2")).getText();
Assertions.assertEquals("浏览商品",value1);
// driver.quit();
}
// @AfterAll
// static void quit(){
// driver.quit();
// }
}
注册页面
根据设计好的测试用例来进行测试
package com.djl.autotest_item.Test;
import com.djl.autotest_item.comment.CommonDriver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.ThreadLocalRandom;
/**
* 注册页面
*/
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class registerTest extends CommonDriver {
private static ChromeDriver driver = getDriver();
/**
* 在每次执行方法之前,都先跳到注册账号页面
*/
@BeforeAll
static void getUrl(){
driver.get("http://127.0.0.1:8080/register.html");
}
/**
* 用户名和密码都为空
*/
@Test
@Order(1)
void usernameAndPasswordNull(){
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("注册",value);
}
/**
* 用户名不为空 密码都为空
*/
@Test
@Order(2)
void PasswordNull(){
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys("王麻子");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("注册",value);
}
/**
* 用户名为空 密码不为空
*/
@Test
@Order(3)
void usernameNull(){
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).clear();
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys("123456");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("注册",value);
}
/**
* 用户名和密码都不为空
* 用户名重复
*/
@Test
@Order(4)
void usernameAndPassword2(){
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys("段佳禄");
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys("123456");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("用户名已经被注册",value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("注册",value1);
}
/**
* 用户名为空格 密码为空格
*/
@Test
@Order(5)
void kongge(){
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("用户名不能为空",value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("注册",value1);
}
/**
* 用户名为正常 密码为空格
*/
@Test
@Order(6)
void kongge1() {
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys("段佳禄");
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("密码不能为空", value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("注册", value1);
}
/**
* 验证用户名最大长度
*/
@Test
@Order(7)
void usernameLen() throws InterruptedException {
String str = "";
for(int i = 0; i < 46;i++){
str += i;
}
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input"))
.sendKeys(str);
// Thread.sleep(2000);
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys("123456");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
// Thread.sleep(2000);
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("用户名最长为+45+个字", value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("注册", value1);
}
/**
* 验证密码最大长度
*/
@Test
@Order(8)
void passwordLen() throws InterruptedException {
String str = "";
for(int i = 0; i < 46;i++){
str += i;
}
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input"))
.sendKeys("123");
// Thread.sleep(2000);
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys(str);
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
// Thread.sleep(2000);
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("密码最长为+45+个字", value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("注册", value1);
}
/**
* 用户名和密码都不为空
* 用户名不重复,注册成功,跳转到登录界面
*/
@Test
@Order(9)
void usernameAndPasswordNotNull(){
ThreadLocalRandom random = ThreadLocalRandom.current();
int n = random.nextInt(0,1000);
String s = n+"";
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys(s);
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys("123456");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value);
}
// @AfterAll
// static void quit(){
// driver.quit();
// }
}
登录页面
package com.djl.autotest_item.Test;
import com.djl.autotest_item.comment.CommonDriver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.ThreadLocalRandom;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class loginTest extends CommonDriver {
private static ChromeDriver driver = getDriver();
/**
* 在每次执行方法之前,都先跳到登录账号页面
*/
@BeforeAll
static void getUrl(){
driver.get("http://127.0.0.1:8080/login.html");
}
/**
* 用户名和密码都为空
*/
@Test
@Order(1)
void usernameAndPasswordNull(){
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value);
}
/**
* 用户名不为空 密码都为空
*/
@Test
@Order(2)
void PasswordNull(){
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys("王麻子");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value);
}
/**
* 用户名为空 密码不为空
*/
@Test
@Order(3)
void usernameNull() throws InterruptedException {
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).clear();
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys("123456");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value);
}
/**
* 用户名为空格 密码为空格
*/
@Test
@Order(4)
void kongge(){
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
//校验是否符合预期
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("用户名或者密码错误",value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value1);
}
/**
* 用户名为正常 密码为空格
*/
@Test
@Order(5)
void kongge1() {
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys("段佳禄");
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys(" ");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("用户名或者密码错误", value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录", value1);
}
/**
* 用户名和密码都不为空
* 用户名不存在,登录失败,跳转到登录界面
*/
@Test
@Order(6)
void usernameAndPasswordNotNull(){
ThreadLocalRandom random = ThreadLocalRandom.current();
int n = random.nextInt(0,1000);
String s = n+"";
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys(s);
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys("123456");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("用户名或者密码错误", value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录", value1);
}
/**
* 用户名和密码都不为空
* 用户名存在
*/
@Test
@Order(7)
void usernameAndPassword2() throws InterruptedException {
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys("段佳禄");
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys("123456");
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
//校验是否符合预期
// Thread.sleep(2000);
String center = driver.findElement(By.xpath("/html/body/div[2]/div[1]")).getText();
Assertions.assertEquals("请选择对应的功能进行操作。",center);
}
// @Test
// @Order(8)
// void quit(){
// driver.quit();
// }
}
上架商品页面
package com.djl.autotest_item.Test;
import com.djl.autotest_item.comment.CommonDriver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.IOException;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class shangjiaTest extends CommonDriver {
private static ChromeDriver driver = getDriver();
@BeforeAll
static void getUrl(){
driver.get("http://127.0.0.1:8080/inbound.html");
}
/**
* 在用户未登录情况下,输入数据 进行上架商品,会跳转到登录界面,此时输入数据正确错误已经无关
*/
@Test
@Order(1)
void noLogin(){
上架空格语句();
//点击上架
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("用户未登录,无法进行该操作",value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value1);
}
/**
* 登录
*
*/
@Test
@Order(2)
void login() throws InterruptedException {
//用户登录
loginTest login = new loginTest();
loginTest.getUrl();
login.usernameAndPassword2();
}
/**
* 在登录状态下
* 进行各字段的判空处理
*/
@Test
@Order(3)
void pdNull() throws InterruptedException, IOException {
// 用户登录
// login();
getUrl();
上架空格语句();
//点击上架
//截图
getScr(getClass().getName());
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("商品名称不能为空",value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("上架商品",value1);
//截图
getScr(getClass().getName());
}
/**
* 登录状态
* 只有库存 价格 折扣 是必须是数字的,其他字段都是String类型
* 并且库存 折扣 是整数 价格 可以是 小数
*/
@Test
@Order(4)
void yanzheng() throws InterruptedException, IOException {
// login();
//名称
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys("水果");
//介绍
driver.findElement(By.xpath("/html/body/div[2]/form/div[3]/input")).sendKeys("吃的");
//单位
driver.findElement(By.xpath("/html/body/div[2]/form/div[4]/input")).sendKeys("个");
上架商品各字段的合法性();
//截图
getScr(getClass().getName());
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("上架商品",value1);
//截图
getScr(getClass().getName());
}
// @AfterAll
// static void quit(){
// driver.quit();
// }
}
浏览商品页面
package com.djl.autotest_item.Test;
import com.djl.autotest_item.comment.CommonDriver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.IOException;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class lookGoods extends CommonDriver {
private static ChromeDriver driver = getDriver();
@BeforeAll
static void getUrl(){
driver.get("http://127.0.0.1:8080/browse-goods.html");
}
/**
* 用户未登录
* 进行浏览商品操作 直接提示用户未登录,跳转到登录界面
*/
@Test
@Order(1)
void liulanGoodNoUsername() throws IOException {
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("用户未登录,无法进行该操作",value);
//截图
getScr(getClass().getName());
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value1);
//截图
getScr(getClass().getName());
}
/**
* 登录
*
*/
@Test
@Order(2)
void login() throws InterruptedException {
//用户登录
loginTest login = new loginTest();
loginTest.getUrl();
login.usernameAndPassword2();
}
/**
* 登录状态下的浏览界面
*/
@Test
@Order(3)
void liulanUsername(){
getUrl();
String value = driver.findElement(By.xpath("/html/body/div[2]/div[1]/h2")).getText();
Assertions.assertEquals("浏览商品",value);
}
// @AfterAll
// static void quit(){
// driver.quit();
// }
}
更新商品页面
package com.djl.autotest_item.Test;
import com.djl.autotest_item.comment.CommonDriver;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.IOException;
import java.util.stream.Stream;
public class gengxinGoods extends CommonDriver {
private static ChromeDriver driver = getDriver();
/**
* 跳转到更新商品页面
*/
@BeforeAll
static void getUrl(){
driver.get("http://127.0.0.1:8080/update-goods.html");
}
/**
* 在用户未登录情况下,输入数据 进行更新 商品,会跳转到登录界面,此时输入数据正确错误已经无关
*/
@Test
@Order(1)
void noLogin(){
上架空格语句();
driver.findElement(By.xpath("/html/body/div[2]/form/div[7]/input")).sendKeys(" ");
//点击上架
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("用户未登录,无法进行该操作",value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("登录",value1);
}
/**
* 登录
*
*/
@Test
@Order(2)
void login() throws InterruptedException, IOException {
//用户登录
loginTest login = new loginTest();
loginTest.getUrl();
login.usernameAndPassword2();
getScr(getClass().getName());
}
/**
* 在登录状态下
* 进行各字段的判空处理
*/
@Test
@Order(3)
void pdNull() throws InterruptedException {
// login();
// getUrl();
上架空格语句();
driver.findElement(By.xpath("/html/body/div[2]/form/div[7]/input")).sendKeys(" ");
//点击上架
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement(By.xpath("/html/body/div/p[1]")).getText();
Assertions.assertEquals("商品+id+不能为空",value);
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("上架商品",value1);
}
/**
* 登录状态
* 只有库存 价格 折扣 是必须是数字的,其他字段都是String类型
* 并且库存 折扣 是整数 价格 可以是 小数
*/
@Test
@Order(4)
void yanzheng() throws IOException {
// login();
// getUrl();
//名称
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys("水果");
//介绍
driver.findElement(By.xpath("/html/body/div[2]/form/div[3]/input")).sendKeys("吃的");
//单位
driver.findElement(By.xpath("/html/body/div[2]/form/div[4]/input")).sendKeys("个");
上架商品各字段的合法性();
driver.findElement(By.xpath("/html/body/div[2]/form/div[7]/input")).sendKeys("哈哈");
//截图
getScr(getClass().getName());
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
driver.findElement(By.xpath("/html/body/div/p[2]/a")).click();
String value1 = driver.findElement(By.xpath("/html/body/div[2]/form/h2")).getText();
Assertions.assertEquals("上架商品",value1);
}
@ParameterizedTest
@MethodSource
@Order(5)
void yan(int a1,String a2,int a3,String a4,String a5,double a6,int a7) throws IOException {
// login();
// getUrl();
driver.findElement(By.xpath("/html/body/div[2]/form/div[1]/input")).sendKeys(a1+"");
driver.findElement(By.xpath("/html/body/div[2]/form/div[2]/input")).sendKeys(a2);
driver.findElement(By.xpath("/html/body/div[2]/form/div[3]/input")).sendKeys(a3+"");
driver.findElement(By.xpath("/html/body/div[2]/form/div[4]/input")).sendKeys(a4);
driver.findElement(By.xpath("/html/body/div[2]/form/div[5]/input")).sendKeys(a5);
driver.findElement(By.xpath("/html/body/div[2]/form/div[6]/input")).sendKeys(a6+"");
driver.findElement(By.xpath("/html/body/div[2]/form/div[7]/input")).sendKeys(a7+"");
//点击更新
//截图
getScr(getClass().getName());
driver.findElement(By.xpath("/html/body/div[2]/form/button")).click();
String value = driver.findElement((By.xpath("/html/body/div[2]/div[1]/table/tbody/tr/td[1]"))).getText();
Assertions.assertEquals(a1+"",value);
}
// //编号
// int a1 = 1;
// String a2 = "面包"; //名称
// int a3 = 2000; //库存
// String a4 = "吃的"; //介绍
// String a5 = "个"; //单位
// double a6 = 2.5; //价格
// int a7 = 100; //折扣
static Stream<Arguments> yan(){
return Stream.of(Arguments.arguments(1,"面包",2000,"吃的","个",2.5,100));
}
// @AfterAll
// static void quit(){
// driver.quit();
// }
}
Quit类
package com.djl.autotest_item.Test;
import com.djl.autotest_item.comment.CommonDriver;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.chrome.ChromeDriver;
public class QuitTest extends CommonDriver {
private static ChromeDriver driver = new ChromeDriver();
@Test
void quit(){
driver.quit();
}
}
使用测试套件@Suite进行整体的自动化测试
package com.djl.autotest_item.Test;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;
@Suite
//按照类的顺序进行测试
@SelectClasses({IndexTest.class,registerTest.class,loginTest.class,shangjiaTest.class,lookGoods.class,gengxinGoods.class,QuitTest.class})
public class RunSuite {
}
对于界面测试、兼容性测试、易用性测试、安全性测试进行了手工测试。