这篇自动化测试,是针对自己做的线上论坛系统进行设计,论坛系统可点击http://111.230.107.237:58080/sign-in.html
1.自动化测试用例
2.前期的准备工作
1.创建Maven项目
2.创建好项目后,在java文件底下创建测试包,并创建forum类和InitAndEnd类
3.在pom.xml文件导入自动化测试需要的相关依赖.
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
</dependencies>
3.根据设计用例图设计论坛系统自动化测试用例
3.1 准备工作
创建驱动对象
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class InitAndEnd {
static WebDriver webDriver;
@BeforeAll
static void SetUp(){
webDriver = new ChromeDriver();
}
@AfterAll
static void TearDown(){
webDriver.quit();
}
}
3.2 测试论坛注册页面
1. 注册页面是否能正常打开.
2. 输入用户名,昵称,密码,确认密码,勾选协议.
3. 如果注册失败,会弹出用户名已存在用户框.
4. 如果注册成功,则会成功跳转到登录页面.
/**
* 注册
*/
@Order(1)
@ParameterizedTest
@CsvFileSource(resources = "register.csv")
void Register(String username, String nickName, String password , String passwordRepeat,String url) throws InterruptedException {
// 打开注册页面
webDriver.get("http://127.0.0.1:58080/sign-up.html");
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 输入用户名
webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 输入昵称
webDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickName);
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 输入密码
webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 输入确认密码
webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 勾选协议
webDriver.findElement(By.cssSelector("#policy")).click();
// 点击注册按钮
webDriver.findElement(By.cssSelector("#submit")).click();
//webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
sleep(2000);
// 检测是否注册成功,如果注册成功会自动跳转登录页,检查url即可
// 获取到当前页面url
String cur_url = webDriver.getCurrentUrl();
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
Assertions.assertEquals(url,cur_url);
}
register.csv 文件内容:
3.3 测试论坛登录页面
1. 输入用户名,密码,确认密码.
2. 如果登录成功会直接跳转到帖子列表页面.
3. 如果登录失败,会弹出对应的弹框.
4. 登录成功会进行验证,获取当前url,和个人信息进行比较.
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
import static java.lang.Thread.sleep;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class forumCases extends InitAndEnd{
/**
* 输入正确的账号,密码登陆成功
*/
@Order(1)
@ParameterizedTest
@CsvFileSource(resources = "LoginSuccess.csv")
void LoginSuccess(String username,String password, String url) throws InterruptedException {
//打开登陆页面
webDriver.get("http://127.0.0.1:58080/sign-in.html");
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
//输入账号admin
webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
//输入密码123
webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
//点击提交按钮
webDriver.findElement(By.cssSelector("#submit")).click();
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
//跳转列表页
// 获取到当前页面url
String cur_url = webDriver.getCurrentUrl();
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 如果url = http://127.0.0.1:58080/index.html,测试通过
//sleep(3000);
Assertions.assertEquals(url,cur_url);
//列表展示用户信息是admin
//用户名是admin测试通过,否则测试不通过
//webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
sleep(3000);
WebElement webElement = webDriver.findElement(By.cssSelector("#index_nav_nickname"));
sleep(30000);
String cur_admin = webElement.getText();
System.out.println(cur_admin);
Assertions.assertEquals(username,cur_admin);
}
LoginSuccess.csv文件内容
3.4 测试帖子列表页
1. 验证登录成功后,帖子列表页是否正常.
/**
* 帖子列表页页面帖子的数量不为0
*/
@Order(2)
@Test
void BlogList(){
// 打开博客列表页
webDriver.get("http://127.0.0.1:58080/index.html");
// 获取页面上所有博客标题对应的元素
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
int title_num = webDriver.findElements(By.cssSelector(".text-truncate")).size();
// 如果元素数量不为0 测试通过
Assertions.assertNotEquals(0,title_num);
}
3.5 测试帖子详情页
1. 进入帖子详情页.
2. 验证帖子标题,和当前页面url是否和设置的参数一致.
/**
*帖子详情页校验
* url
* 帖子标题
*/
@Order(3)
@ParameterizedTest
@MethodSource("Generator")
void BlogDetail(String url, String title){
// 找到第一篇帖子对应的帖子标题进行点击
webDriver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a ")).click();
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 获取当前页面的url
String cur_url = webDriver.getCurrentUrl();
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 获取帖子标题
String cur_title = webDriver.findElement(By.cssSelector("#details_article_title")).getText();
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 校验参数
Assertions.assertEquals(url,cur_url);
Assertions.assertEquals(title,cur_title);
}
public static Stream<Arguments> Generator() {
return Stream.of(Arguments.arguments("http://127.0.0.1:58080/index.html","11"));
}
3.6 测试帖子编辑页,发布帖子以及删除帖子
1.点击发布帖子按钮.
2.选择版块,输入标题,输入正文内容.
3.点击发布,如果发布失败会跳出响应的弹窗.
4.点击发布的帖子标题,进行验证.
5.点击删除按钮,测试删除功能,成功或者失败都会跳出响应的弹窗.
/**
* 新建帖子
*/
@Order(5)
@Test
void EditBlog() throws InterruptedException {
// 找到发布帖子按钮,点击
webDriver.findElement(By.cssSelector("#nav_board_index > a > span.nav-link-title")).click();
webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 点击版块选择
webDriver.findElement(By.cssSelector("#article_post_borad")).click();
// 选择想要发布的版块
webDriver.findElement(By.cssSelector("#article_post_borad > option:nth-child(3)")).click();
sleep(3000);
// 找到标题输入框 通过Js将内容输入
((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"article_post_title\").value=\"自动化测试\"");
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,document.body.scrollHeight)");
sleep(1000);
// 点击发布博客
webDriver.findElement(By.cssSelector("#article_post_submit")).click();
}
/**
* 校验已发布的帖子标题
* 校验发布时间
*/
@Order(6)
@Test
void BlogInfoChecked(){
webDriver.get("http://127.0.0.1:58080/index.html");
// 获取第一篇帖子标题
String title = webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a")).getText();
// 获取第一篇帖子发布时间
String time = webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col > ul > li:nth-child(2)")).getText();
// 校验帖子标题是不是11
Assertions.assertEquals("自动化测试",title);
// Assertions.assertEquals("2023-09-09",time);
if(time.contains("2023-09-09")){
System.out.println("测试通过");
}else {
System.out.println("当前时间是:" + time);
System.out.println("测试不通过");
}
}
/**
* 删除帖子
* 校验删除后第一篇帖子是不是11
*/
@Order(7)
@Test
void DeleteBlog() throws InterruptedException {
// 打开帖子列表页面
webDriver.get("http://127.0.0.1:58080/index.html");
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 点击帖子标题进入帖子详情页
webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a")).click();
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 点击删除按钮
webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a")).click();
sleep(1000);
// 点击确认删除
webDriver.findElement(By.cssSelector("#details_artile_delete")).click();
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// 帖子列表页第一篇帖子不是"自动化测试"
String title = webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a")).getText();
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
//校验当前帖子标题不等于
Assertions.assertNotEquals(title,"自动化测试");
}
3.7 测试注销功能
/**
* 注销功能
*/
@Order(8)
@Test
void Logout() throws InterruptedException {
webDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown > a > div")).click();
sleep(1000);
webDriver.findElement(By.cssSelector("#index_user_logout")).click();
// 校验url(登陆url)
String cur_url = webDriver.getCurrentUrl();
Assertions.assertEquals("http://127.0.0.1:58080/sign-in.html",cur_url);
sleep(2000);
// 校验登陆按钮是否存在
WebElement webElement = webDriver.findElement(By.cssSelector("#submit"));
Assertions.assertNotNull(webElement);
}