博客系统自动化测试项目实战(测试系列9)
目录
前言:
1.博客前端页面测试用例图
2.测试用例的代码实现
2.1登录页面的测试
2.2博客列表页面的测试
2.3写博客测试
2.4博客详情页面的测试
2.5已发布博客的标题和时间的测试
2.6注销用户的测试
结束语:
前言:
之前小编给大家讲解了有关于Selenium和Junit5自动化测试的一些基础知识,那么下面我们就针对于我们自己做的一个项目来使用Junit来进行一下自动化测试。
博客项目的前后端博客链接:前端☞http://t.csdn.cn/jZkQd 后端☞http://t.csdn.cn/sN1Uq
博客项目的源码Gitee链接☞https://gitee.com/YAUGAOLELE/project
1.博客前端页面测试用例图
2.测试用例的代码实现
代码侧边的展示:
我们一共创建两个类一个是BlogCase另一个是InitAndEnd。具体代码的创建请看下边。
初始化代码的实现:
package BlogTest;import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;//用来放置初始化的操作以及最后的收尾工作
public class InitAndEnd {//创建驱动static WebDriver webDriver;//初识化操作,打开浏览器@BeforeAllstatic void SetUp() {webDriver = new ChromeDriver();}//关闭浏览器@AfterAllstatic void TearDown() {webDriver.quit();}
}
2.1登录页面的测试
代码展示:
package BlogTest;import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.openqa.selenium.By;import java.util.concurrent.TimeUnit;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{/*** 输入正确的账号,密码,登录成功*/@Order(1)@ParameterizedTest@CsvFileSource(resources = "LoginSuccess.csv")void LoginSuccess(String username, String password, String blog_list_url){System.out.println(username + password + blog_list_url);//打开博客登录页面webDriver.get("http://43.138.29.216:8080/blog_system/login.html");webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入账号:zhangsan /lisiwebDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入密码:123webDriver.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);//跳转到列表页//获取到当前页面的urlString cur_url = webDriver.getCurrentUrl();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//如果url=http://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过Assertions.assertEquals(blog_list_url,cur_url);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//列表页展示的是zhangsan/lisi//用户名是zhangsan测试通过,否则测试不通过String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);Assertions.assertEquals(username,cur_admin);}
}
结果展示:
2.2博客列表页面的测试
代码展示:
package BlogTest;import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.openqa.selenium.By;import java.util.concurrent.TimeUnit;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{/*** 输入正确的账号,密码,登录成功*/@Order(1)@ParameterizedTest@CsvFileSource(resources = "LoginSuccess.csv")void LoginSuccess(String username, String password, String blog_list_url){System.out.println(username + password + blog_list_url);//打开博客登录页面webDriver.get("http://43.138.29.216:8080/blog_system/login.html");webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入账号:zhangsan /lisiwebDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入密码:123webDriver.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);//跳转到列表页//获取到当前页面的urlString cur_url = webDriver.getCurrentUrl();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//如果url=http://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过Assertions.assertEquals(blog_list_url,cur_url);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//列表页展示的是zhangsan/lisi//用户名是zhangsan测试通过,否则测试不通过String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);Assertions.assertEquals(username,cur_admin);}/***博客列表页面的博客数量不为0*/@Order(2)@Testvoid BlogList() {//打开博客列表页webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");//获取页面上的所有博客标题对应的元素,如果这个元素的数量不为0,则认为测试通过//加上只能等待,如果不加的话可能前端页面没有渲染出来,就可能导致获取元素失败webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);int title_num = webDriver.findElements(By.cssSelector(".title")).size();//断言:如果这个元素的数量不为0,则认为测试通过Assertions.assertNotEquals(0,title_num);}
}
结果展示:
2.3写博客测试
代码展示:
package BlogTest;import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;import java.util.concurrent.TimeUnit;import static java.lang.Thread.sleep;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{/*** 输入正确的账号,密码,登录成功*/@Order(1)@ParameterizedTest@CsvFileSource(resources = "LoginSuccess.csv")void LoginSuccess(String username, String password, String blog_list_url){System.out.println(username + password + blog_list_url);//打开博客登录页面webDriver.get("http://43.138.29.216:8080/blog_system/login.html");webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入账号:zhangsan /lisiwebDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入密码:123webDriver.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);//跳转到列表页//获取到当前页面的urlString cur_url = webDriver.getCurrentUrl();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//如果url=http://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过Assertions.assertEquals(blog_list_url,cur_url);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//列表页展示的是zhangsan/lisi//用户名是zhangsan测试通过,否则测试不通过String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);Assertions.assertEquals(username,cur_admin);}/***博客列表页面的博客数量不为0*/@Order(2)@Testvoid BlogList() {//打开博客列表页webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");//获取页面上的所有博客标题对应的元素,如果这个元素的数量不为0,则认为测试通过//加上只能等待,如果不加的话可能前端页面没有渲染出来,就可能导致获取元素失败webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);int title_num = webDriver.findElements(By.cssSelector(".title")).size();//断言:如果这个元素的数量不为0,则认为测试通过Assertions.assertNotEquals(0,title_num);}/*** 写博客*/@Order(3)@Testvoid EditBlog() throws InterruptedException {//找到写博客按钮,点击webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);//找到对应的输入框,输入对应的标题。webDriver.findElement(By.cssSelector("#title-input"));//通过JS进行标题输入webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title-input\").value=\"自动化测试\"");sleep(3000);//点击提交webDriver.findElement(By.cssSelector("#submit")).click();sleep(3000);//校验//获取当前页面的urlString cur_url = webDriver.getCurrentUrl();Assertions.assertEquals("http://43.138.29.216:8080/blog_system/blog_list.html",cur_url);}
}
结果展示:
2.4博客详情页面的测试
代码展示:
package BlogTest;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.junit.jupiter.params.provider.MethodSource;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;import static java.lang.Thread.sleep;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{private static Stream<Arguments> Generator() {return Stream.of(Arguments.arguments("http://43.138.29.216:8080/blog_system/blog_detail.html","博客详情页","自动化测试"));}/*** 输入正确的账号,密码,登录成功*/@Order(1)@ParameterizedTest@CsvFileSource(resources = "LoginSuccess.csv")void LoginSuccess(String username, String password, String blog_list_url){System.out.println(username + password + blog_list_url);//打开博客登录页面webDriver.get("http://43.138.29.216:8080/blog_system/login.html");webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入账号:zhangsan /lisiwebDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入密码:123webDriver.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);//跳转到列表页//获取到当前页面的urlString cur_url = webDriver.getCurrentUrl();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//如果url=http://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过Assertions.assertEquals(blog_list_url,cur_url);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//列表页展示的是zhangsan/lisi//用户名是zhangsan测试通过,否则测试不通过String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);Assertions.assertEquals(username,cur_admin);}/***博客列表页面的博客数量不为0*/@Order(2)@Testvoid BlogList() {//打开博客列表页webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");//获取页面上的所有博客标题对应的元素,如果这个元素的数量不为0,则认为测试通过//加上只能等待,如果不加的话可能前端页面没有渲染出来,就可能导致获取元素失败webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);int title_num = webDriver.findElements(By.cssSelector(".title")).size();//断言:如果这个元素的数量不为0,则认为测试通过Assertions.assertNotEquals(0,title_num);}/*** 写博客*/@Order(3)@Testvoid EditBlog() throws InterruptedException {//找到写博客按钮,点击webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);//找到对应的输入框,输入对应的标题。webDriver.findElement(By.cssSelector("#title-input"));//通过JS进行标题输入webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title-input\").value=\"自动化测试\"");sleep(3000);//点击提交webDriver.findElement(By.cssSelector("#submit")).click();sleep(3000);//校验//获取当前页面的urlString cur_url = webDriver.getCurrentUrl();Assertions.assertEquals("http://43.138.29.216:8080/blog_system/blog_list.html",cur_url);}/*** 博客详情页面的校验* 1.校验url* 2.校验博客标题* 3.页面title是“博客详情页”的测试*/@Order(4)@ParameterizedTest@MethodSource("Generator")void BlogDetail(String expected_url, String expected_title, String expected_blog_title) {//找到第一篇博客对应查看全文的按钮webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[2]/a")).click();//获取当前页面的urlwebDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_url = webDriver.getCurrentUrl();//获取当前页面的titlewebDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_title = webDriver.getTitle();//获取博客标题webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > h3")).getText();//校验webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// Assertions.assertEquals(expected_url,cur_url);Assertions.assertEquals(expected_title,cur_title);Assertions.assertEquals(expected_blog_title,cur_blog_title);if (cur_url.contains(expected_url)) {System.out.println("测试通过");}else {System.out.println(cur_url);System.out.println("测试不通过");}}
}
结果展示:
2.5已发布博客的标题和时间的测试
代码展示:
package BlogTest;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.junit.jupiter.params.provider.MethodSource;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;import static java.lang.Thread.sleep;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{private static Stream<Arguments> Generator() {return Stream.of(Arguments.arguments("http://43.138.29.216:8080/blog_system/blog_detail.html","博客详情页","自动化测试"));}/*** 输入正确的账号,密码,登录成功*/@Order(1)@ParameterizedTest@CsvFileSource(resources = "LoginSuccess.csv")void LoginSuccess(String username, String password, String blog_list_url){System.out.println(username + password + blog_list_url);//打开博客登录页面webDriver.get("http://43.138.29.216:8080/blog_system/login.html");webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入账号:zhangsan /lisiwebDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入密码:123webDriver.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);//跳转到列表页//获取到当前页面的urlString cur_url = webDriver.getCurrentUrl();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//如果url=http://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过Assertions.assertEquals(blog_list_url,cur_url);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//列表页展示的是zhangsan/lisi//用户名是zhangsan测试通过,否则测试不通过String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);Assertions.assertEquals(username,cur_admin);}/***博客列表页面的博客数量不为0*/@Order(2)@Testvoid BlogList() {//打开博客列表页webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");//获取页面上的所有博客标题对应的元素,如果这个元素的数量不为0,则认为测试通过//加上只能等待,如果不加的话可能前端页面没有渲染出来,就可能导致获取元素失败webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);int title_num = webDriver.findElements(By.cssSelector(".title")).size();//断言:如果这个元素的数量不为0,则认为测试通过Assertions.assertNotEquals(0,title_num);}/*** 写博客*/@Order(3)@Testvoid EditBlog() throws InterruptedException {//找到写博客按钮,点击webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);//找到对应的输入框,输入对应的标题。webDriver.findElement(By.cssSelector("#title-input"));//通过JS进行标题输入webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title-input\").value=\"自动化测试\"");sleep(3000);//点击提交webDriver.findElement(By.cssSelector("#submit")).click();sleep(3000);//校验//获取当前页面的urlString cur_url = webDriver.getCurrentUrl();Assertions.assertEquals("http://43.138.29.216:8080/blog_system/blog_list.html",cur_url);}/*** 博客详情页面的校验* 1.校验url* 2.校验博客标题* 3.页面title是“博客详情页”的测试*/@Order(4)@ParameterizedTest@MethodSource("Generator")void BlogDetail(String expected_url, String expected_title, String expected_blog_title) {//找到第一篇博客对应查看全文的按钮webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[2]/a")).click();//获取当前页面的urlwebDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_url = webDriver.getCurrentUrl();//获取当前页面的titlewebDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_title = webDriver.getTitle();//获取博客标题webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > h3")).getText();//校验webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// Assertions.assertEquals(expected_url,cur_url);Assertions.assertEquals(expected_title,cur_title);Assertions.assertEquals(expected_blog_title,cur_blog_title);if (cur_url.contains(expected_url)) {System.out.println("测试通过");}else {System.out.println(cur_url);System.out.println("测试不通过");}}@Order(5)@Test/*** 校验已发布博客的标题* 校验已发布博客时间*/void BlogInfoChecked() {webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");//获取第一篇博客的标题String first_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(1) > div.title")).getText();//获取第一篇博客的发布时间String first_blog_time = webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[1]/div[2]")).getText();//校验博客标题是不是自动化测试Assertions.assertEquals("自动化测试",first_blog_title);//如果是2023-09-03发布的,测试通过if (first_blog_time.contains("2023-09-03")) {System.out.println("测试通过");}else {System.out.println("当前时间是:" + first_blog_time);System.out.println("测试不通过");}}}
结果展示:
2.6注销用户的测试
代码展示:
package BlogTest;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.junit.jupiter.params.provider.MethodSource;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;import static java.lang.Thread.sleep;@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCase extends InitAndEnd{private static Stream<Arguments> Generator() {return Stream.of(Arguments.arguments("http://43.138.29.216:8080/blog_system/blog_detail.html","博客详情页","自动化测试"));}/*** 输入正确的账号,密码,登录成功*/@Order(1)@ParameterizedTest@CsvFileSource(resources = "LoginSuccess.csv")void LoginSuccess(String username, String password, String blog_list_url){System.out.println(username + password + blog_list_url);//打开博客登录页面webDriver.get("http://43.138.29.216:8080/blog_system/login.html");webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入账号:zhangsan /lisiwebDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//输入密码:123webDriver.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);//跳转到列表页//获取到当前页面的urlString cur_url = webDriver.getCurrentUrl();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//如果url=http://43.138.29.216:8080/blog_system/blog_list.html,测试通过,否则测试不通过Assertions.assertEquals(blog_list_url,cur_url);webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//列表页展示的是zhangsan/lisi//用户名是zhangsan测试通过,否则测试不通过String cur_admin = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);Assertions.assertEquals(username,cur_admin);}/***博客列表页面的博客数量不为0*/@Order(2)@Testvoid BlogList() {//打开博客列表页webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");//获取页面上的所有博客标题对应的元素,如果这个元素的数量不为0,则认为测试通过//加上只能等待,如果不加的话可能前端页面没有渲染出来,就可能导致获取元素失败webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);int title_num = webDriver.findElements(By.cssSelector(".title")).size();//断言:如果这个元素的数量不为0,则认为测试通过Assertions.assertNotEquals(0,title_num);}/*** 写博客*/@Order(3)@Testvoid EditBlog() throws InterruptedException {//找到写博客按钮,点击webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);//找到对应的输入框,输入对应的标题。webDriver.findElement(By.cssSelector("#title-input"));//通过JS进行标题输入webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title-input\").value=\"自动化测试\"");sleep(3000);//点击提交webDriver.findElement(By.cssSelector("#submit")).click();sleep(3000);//校验//获取当前页面的urlString cur_url = webDriver.getCurrentUrl();Assertions.assertEquals("http://43.138.29.216:8080/blog_system/blog_list.html",cur_url);}/*** 博客详情页面的校验* 1.校验url* 2.校验博客标题* 3.页面title是“博客详情页”的测试*/@Order(4)@ParameterizedTest@MethodSource("Generator")void BlogDetail(String expected_url, String expected_title, String expected_blog_title) {//找到第一篇博客对应查看全文的按钮webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[2]/a")).click();//获取当前页面的urlwebDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_url = webDriver.getCurrentUrl();//获取当前页面的titlewebDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_title = webDriver.getTitle();//获取博客标题webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > h3")).getText();//校验webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
// Assertions.assertEquals(expected_url,cur_url);Assertions.assertEquals(expected_title,cur_title);Assertions.assertEquals(expected_blog_title,cur_blog_title);if (cur_url.contains(expected_url)) {System.out.println("测试通过");}else {System.out.println(cur_url);System.out.println("测试不通过");}}@Order(5)@Test/*** 校验已发布博客的标题* 校验已发布博客时间*/void BlogInfoChecked() {webDriver.get("http://43.138.29.216:8080/blog_system/blog_list.html");//获取第一篇博客的标题String first_blog_title = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(1) > div.title")).getText();//获取第一篇博客的发布时间String first_blog_time = webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[1]/div[2]")).getText();//校验博客标题是不是自动化测试Assertions.assertEquals("自动化测试",first_blog_title);//如果是2023-09-03发布的,测试通过if (first_blog_time.contains("2023-09-03")) {System.out.println("测试通过");}else {System.out.println("当前时间是:" + first_blog_time);System.out.println("测试不通过");}}/*** 注销*/@Order(6)@Testvoid Logout() {webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();//校验url(登录)webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);String cur_url = webDriver.getCurrentUrl();Assertions.assertEquals("http://43.138.29.216:8080/blog_system/login.html",cur_url);//校验提交按钮webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);WebElement webElement = webDriver.findElement(By.cssSelector("#submit"));webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);Assertions.assertNotNull(webElement);}
}
结果展示:
结束语:
好了这节小编就给大分享到这里啦,希望这节对大家有关于使用Junit5的自动化测试有一定帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)
相关文章:

博客系统自动化测试项目实战(测试系列9)
目录 前言: 1.博客前端页面测试用例图 2.测试用例的代码实现 2.1登录页面的测试 2.2博客列表页面的测试 2.3写博客测试 2.4博客详情页面的测试 2.5已发布博客的标题和时间的测试 2.6注销用户的测试 结束语: 前言: 之前小编给大家讲…...
华纳云:Linux的底层体系结构是怎样的
Linux操作系统的底层体系结构是一个开源的Unix-like操作系统内核,通常称为Linux内核(Linux Kernel)。下面是Linux底层体系结构的主要组成部分和工作原理: 内核(Kernel): Linux的核心部分是内核,它是操作系统…...

SpringMVC常用注解介绍及参数传递说明
前言 上一篇文章介绍了SpringMVC是什么以及它的工作流程和核心组件,介绍入门示例时,提到了RequestMapping注解,那么这篇文章就来介绍SpringMVC中更多的常用的注解,以及它的参数传递。 一. SpringMVC常用注解 1.1 RequestParam …...
4 个你可能不知道的 Python 迭代工具过滤器函数
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 当您只想循环遍历迭代器、检索序列中的元素并处理它们时,这些元素特别有用 - 所有这些都无需将它们存储在内存中。今天我们将学习如何使用以下四个迭代工具过滤器函数: filterfalsetakewhiledr…...

Scrapy简介-快速开始-项目实战-注意事项-踩坑之路
scrapy项目模板地址:https://github.com/w-x-x-w/Spider-Project Scrapy简介 Scrapy是什么? Scrapy是一个健壮的爬虫框架,可以从网站中提取需要的数据。是一个快速、简单、并且可扩展的方法。Scrapy使用了异步网络框架来处理网络通讯&…...
lightdb 支持兼容Oracle的to_clob函数
文章目录 概述案例演示 概述 在信创移植的SQL语句中,有来源于Oracle数据库的SQL语句。 在ORACLE PL/SQL包中,你可以使用TO_CLOB(character)函数将RAW、CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB值转换为CLOB。 因此在LightDB 23.3版本中实现了…...

ES6中let和const关键字与var关键字之间的区别?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 变量作用域(Scope):⭐ 变量提升(Hoisting):⭐ 重复声明:⭐ 初始化:⭐ 全局对象属性:⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#…...

Python中的异常处理3-1
Python中的异常指的是语法上没有错误,但是代码执行时会导致错误的情况。 1 抛出异常 在图1所示的代码中,要求用户输入一个数字,该代码在语法上没有错误。 图1 出现异常的代码 但是运行该代码之后,如果用户输入的是数字…...

大数据与AI:解析智慧城市的幕后英雄
文章目录 1. 智慧城市的定义与发展2. 大数据:智慧城市的基石2.1 大数据的概念与重要性2.2 大数据的应用案例2.2.1 智能交通管理2.2.2 能源效率优化2.2.3 城市规划与土地利用 3. 人工智能:智慧城市的大脑3.1 人工智能的概念与重要性3.2 人工智能的应用案例…...

将钉钉机器人小程序从一个公司迁移至另一个公司的步骤
引言: 由于我们以前开发的钉钉小程序都在一个公司,想在想应用到另一个公司,这就牵扯出了关于钉钉小程序迁移方面的具体步骤。下面是具体步骤: 1、创建一个钉钉小程序 在这一步你需要有钉钉开放平台的开发者权限,具体…...

j解决Ubuntu无法安装pycairo和PyGObject
环境:虚拟机Ubuntu20.04,vscode无法安装pycairo和PyGObject 虚拟机Ubuntu20.04,vscode中运行Anaconda搭建的vens 的Python3.8.10 首先在vscode中点击ctrlshiftp,选择Python3.8.10的环境,自动激活Python 最近在搞无人…...
PBI 背景全屏规律呈现水印
想要在Power BI报表中实现全屏规律呈现斜角水印的效果,并且显示的值是用户登录的email的话,目前Power BI desktop的背景“Background”功能中暂时没有支持的直接设置方法。但是基于测试和研究,Power BI市场中有一个叫“HTML Content”的custom visual提供,它支持嵌入一些HT…...
2023年全国职业院校技能大赛信息安全管理与评估网络安全事件响应、数字取证调查、应用程序安全任务书
全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 任务书 模块二 网络安全事件响应、数字取证调查、应用程序安全 比赛时间及注意事项 本阶段比赛时长为180分钟,时间为13:30-16:30。 【注意事项】 比赛结束,不得关机;选手首先需要…...

浙大陈越何钦铭数据结构08-图7 公路村村通【循环和最小堆版】
题目 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N)…...

Linux 部署1Panel现代化运维管理面板远程访问
文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…...
用百度云怎么重装电脑系统
用百度云怎么重装电脑系统 随着云计算技术的飞速发展,百度云成为了人们日常生活中不可或缺的一部分。百度云不仅提供了强大的文件存储和传输功能,还可以帮助人们轻松地重装电脑系统。下面就让我们来介绍一下如何用百度云重装电脑系统。 步骤一…...

SpringCloud环境搭建及入门案例
技术选型: Maven 3.8.4SpringBoot 2.7.8SpringCloud 2021.0.4SpringCloudAlibaba 2022.0.1.0Nacos 2.1.1Sentinel 1.8.5 模块设计: 父工程:SpringCloudAlibaba订单微服:order-service库存微服:stock-service 1.创建…...
什么是序列化和反序列化?
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种常用的数据交换格式,用于在不同系统之间传输和存储数据。 JSON是一种轻量级的数据交换格式,它使用易于理解的键值对的形式表示数…...

React 消息文本循环展示
需求 页面上有个小喇叭,循环展示消息内容 逻辑思路 设置定时器,修改translateX属性来实现滚动,判断滚动位置,修改list位置来实现无限滚动 实现效果 代码 /** Author: Do not edit* Date: 2023-09-07 11:11:45* LastEditors: …...

java获取jenkins发布版本信息
一.需求: 系统cicd发布时首页需要展示jenkins发布的版本和优化内容 二.思路: 1.jenkins创建用户和秘钥 2.找到对应构建任务信息的api 3.RestTemplate发起http请求 三.实现: 1.创建用户和token 2.查找jenkins API 创建 Job POST http://localhost…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...