目录
自动化项目实施的基本流程如下图所示:
手工测试用例、自动化测试用例。
校验登录后主页显示的用户名称和登录时输入的用户名是否相等。
- public class ForumCases extends InitAndEnd{
- /**
- * 登录测试
- */
- @Test
- void login(){
- // 打开要进行登录的页面
- webDriver.get("http://150.158.82.121:58080/sign-in.html");
- // 输入用户名
- webDriver.findElement(By.cssSelector("#username")).sendKeys("明玉");
- // 输入密码
- webDriver.findElement(By.cssSelector("#password")).sendKeys("123");
- // 点击登录
- webDriver.findElement(By.cssSelector("#submit")).click();
- // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
- String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
- // 断言相等
- Assertions.assertEquals("明玉",user_name);
- }
- }
测试成功:
我们还可以通过参数化对于以上代码进行优化:
- public class ForumCases extends InitAndEnd{
- /**
- * 登录测试
- */
- @ParameterizedTest
- @CsvSource(value = "明玉,123")
- void login(String username,String password){
- // 打开要进行登录的页面
- webDriver.get("http://150.158.82.121:58080/sign-in.html");
- // 输入用户名
- webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
- // 输入密码
- webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
- // 点击登录
- webDriver.findElement(By.cssSelector("#submit")).click();
- // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
- String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
- // 断言相等
- Assertions.assertEquals(username,user_name);
- }
- }
测试成功:
- @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
- public class ForumCases extends InitAndEnd{
- /**
- * 登录测试
- * 账号正确,密码正确,登录成功
- */
- @Order(1)
- @ParameterizedTest
- @CsvSource(value = "明玉,123")
- void login(String username,String password){
- // 打开要进行登录的页面
- webDriver.get("http://150.158.82.121:58080/sign-in.html");
- // 输入用户名
- webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
- // 输入密码
- webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
- // 点击登录
- webDriver.findElement(By.cssSelector("#submit")).click();
- // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
- String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
- // 断言相等
- Assertions.assertEquals(username,user_name);
- }
- /**
- * 帖子列表
- */
- @Order(2)
- @Test
- void articleList(){
- webDriver.get("http://150.158.82.121:58080/index.html");
- // 智能等待3秒
- webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
- // 统计首页的帖子数目
- int article_num = webDriver.findElements(By.cssSelector("#nav_board_index > a")).size();
- // 断言帖子数目不为0
- Assertions.assertNotEquals(0,article_num);
- }
- }
测试成功:
首先,我们点击帖子标题查看详情时,帖子的详情页中帖子标题不能为空。
- @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
- public class ForumCases extends InitAndEnd{
- /**
- * 登录测试
- * 账号正确,密码正确,登录成功
- */
- @Order(1)
- @ParameterizedTest
- @CsvSource(value = "明玉,123")
- void login(String username,String password){
- // 打开要进行登录的页面
- webDriver.get("http://150.158.82.121:58080/sign-in.html");
- // 输入用户名
- webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
- // 输入密码
- webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
- // 点击登录
- webDriver.findElement(By.cssSelector("#submit")).click();
- // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
- String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
- // 断言相等
- Assertions.assertEquals(username,user_name);
- }
- /**
- * 帖子列表
- */
- @Order(2)
- @Test
- void articleList(){
- webDriver.get("http://150.158.82.121:58080/index.html");
- // 智能等待3秒
- webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
- // 统计首页的帖子数目
- int article_num = webDriver.findElements(By.cssSelector("#nav_board_index > a")).size();
- // 断言帖子数目不为0
- Assertions.assertNotEquals(0,article_num);
- }
- /**
- * 帖子详情页检验
- * 校验帖子的标题不为空
- */
- @Order(3)
- @Test
- void articleDetail(){
- // 打开列表页
- webDriver.get("http://150.158.82.121:58080/index.html");
- // 找到需要查看的帖子标题并点击
- webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
- // 获取博客的标题
- String article_title = webDriver.findElement(By.cssSelector("#details_article_content_title")).getText();
- // 断言标题不为空
- Assertions.assertNotNull(article_title);
- }
- }
测试成功:
其次,我们点击帖子标题查看详情时,帖子的详情页中帖子内容不能为空。
- @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
- public class ForumCases extends InitAndEnd{
- /**
- * 登录测试
- * 账号正确,密码正确,登录成功
- */
- @Order(1)
- @ParameterizedTest
- @CsvSource(value = "明玉,123")
- void login(String username,String password){
- // 打开要进行登录的页面
- webDriver.get("http://150.158.82.121:58080/sign-in.html");
- // 输入用户名
- webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
- // 输入密码
- webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
- // 点击登录
- webDriver.findElement(By.cssSelector("#submit")).click();
- // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
- String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
- // 断言相等
- Assertions.assertEquals(username,user_name);
- }
- /**
- * 帖子列表
- */
- @Order(2)
- @Test
- void articleList(){
- webDriver.get("http://150.158.82.121:58080/index.html");
- // 智能等待3秒
- webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
- // 统计首页的帖子数目
- int article_num = webDriver.findElements(By.cssSelector("#nav_board_index > a")).size();
- // 断言帖子数目不为0
- Assertions.assertNotEquals(0,article_num);
- }
- /**
- * 帖子详情页检验
- * 校验帖子的标题不为空
- * 校验帖子的内容不为空
- */
- @Order(3)
- @Test
- void articleDetail(){
- // 打开列表页
- webDriver.get("http://150.158.82.121:58080/index.html");
- // 找到需要查看的帖子标题并点击
- webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
- // 获取帖子的标题
- String article_title = webDriver.findElement(By.cssSelector("#details_article_content_title")).getText();
- // 断言帖子的标题不为空
- Assertions.assertNotNull(article_title);
- // 获取帖子的内容
- String article_content = webDriver.findElement(By.cssSelector("#details_article_content > p")).getText();
- // 断言帖子的内容不为空
- Assertions.assertNotNull(article_content);
- }
- }
测试成功:
我们可以直接在控制台上进行输入:
我们可以直接复制以上的 JS 脚本:document.querySelector("#article_post_title").value="测试"
- package forumTest;
-
- import net.bytebuddy.build.ToStringPlugin;
- import org.junit.jupiter.api.*;
- import org.junit.jupiter.params.ParameterizedTest;
- import org.junit.jupiter.params.provider.CsvSource;
- import org.junit.jupiter.params.provider.ValueSource;
- import org.openqa.selenium.By;
- import org.openqa.selenium.JavascriptExecutor;
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.WebElement;
-
- import java.util.concurrent.TimeUnit;
-
- import static java.lang.Thread.sleep;
-
- @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
- public class ForumCases extends InitAndEnd{
- /**
- * 登录测试
- * 账号正确,密码正确,登录成功
- */
- @Order(1)
- @ParameterizedTest
- @CsvSource(value = "明玉,123")
- void login(String username,String password){
- // 打开要进行登录的页面
- webDriver.get("http://150.158.82.121:58080/sign-in.html");
- // 输入用户名
- webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
- // 输入密码
- webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
- // 智能等待5秒
- webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
- // 点击登录
- webDriver.findElement(By.cssSelector("#submit")).click();
- // 校验用户是否登录成功,即当前用户是否为登录的用户,如果是则测试通过,否则测试不通过
- String user_name = webDriver.findElement(By.cssSelector("#username")).getAttribute("value");
- // 断言相等
- Assertions.assertEquals(username,user_name);
- }
- /**
- * 帖子列表
- */
- @Order(2)
- @Test
- void articleList(){
- webDriver.get("http://150.158.82.121:58080/index.html");
- // 智能等待3秒
- webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
- // 统计首页的帖子数目
- int article_num = webDriver.findElements(By.cssSelector("#nav_board_index > a")).size();
- // 断言帖子数目不为0
- Assertions.assertNotEquals(0,article_num);
- }
- /**
- * 帖子详情页检验
- * 校验帖子的标题不为空
- * 校验帖子的内容不为空
- */
- // @Order(3)
- // @Test
- // void articleDetail(){
- // // 打开列表页
- // webDriver.get("http://150.158.82.121:58080/index.html");
- // // 找到需要查看的帖子标题并点击
- // webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
- // // 获取帖子的标题
- // String article_title = webDriver.findElement(By.cssSelector("#details_article_content_title")).getText();
- // // 断言帖子的标题不为空
- // Assertions.assertNotNull(article_title);
- // // 获取帖子的内容
- // String article_content = webDriver.findElement(By.cssSelector("#details_article_content > p")).getText();
- // // 断言帖子的内容不为空
- // Assertions.assertNotNull(article_content);
- // }
- /**
- * 发布帖子
- */
- // @Order(4)
- // @Test
- // void publish_article() throws InterruptedException {
- // // 找到发布帖子的按钮
- // 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();
- // sleep(2000);
- // // 执行 js(选中标题输入框,输入标题)
- // ((JavascriptExecutor)webDriver).executeScript("document.querySelector(\"#article_post_title\").value=\"测试\"");
- // // 智能等待5秒
- // webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
- // // 执行 js(选中内容输入框,输入内容)
- // ((JavascriptExecutor)webDriver).executeScript("document.querySelector(\"#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span\").innerText=\"自动化测试\"");
- // sleep(5000);
- // // 点击发布按钮
- webDriver.findElement(By.cssSelector("#article_post_submit")).click();
- //
- // WebElement element = webDriver.findElement(By.cssSelector("#article_post_submit"));
- // ((JavascriptExecutor) webDriver).executeScript("arguments[0].click();", element);
- // // 校验页面跳转到首页
- // String currentUrl = webDriver.getCurrentUrl();
- // Assertions.assertEquals("http://150.158.82.121:58080/index.html",currentUrl);
- // // 校验第一条帖子的标题是不是我们刚才发布的标题
- // String firstTitle = webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).getText();
- // Assertions.assertEquals("测试",firstTitle);
- // }
-
-
- /**
- * 退出登录校验
- */
- @Order(5)
- @Test
- void logOut() throws InterruptedException {
- webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
- // 找到退出按钮并点击
- webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();
- sleep(3000);
- webDriver.findElement(By.cssSelector("#index_user_logout")).click();
- sleep(3000);
- webDriver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
- // 校验是否退回登录页
- String currentUrl = webDriver.getCurrentUrl();
- webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
- Assertions.assertEquals("http://150.158.82.121:58080/sign-in.html",currentUrl);
- }
- }
测试成功:
先进行基础功能的自动化测试~
其他详细的测试将不断在本篇文章中进行迭代。