package common; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeOptions; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.time.Duration; import java.util.ArrayList; import java.util.List; public class commonDriver { private static EdgeDriver driver; public static EdgeDriver getDriver(){ //更新驱动后出现(java.io.IOException: Invalid Status code=403 text=Forbidden)问题加上下面两个语句后解决问题 EdgeOptions options=new EdgeOptions(); options.addArguments("--remote-allow-origins=*"); if(driver==null){ driver=new EdgeDriver(options); //隐式等待 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3)); } return driver; } public List<String> getTime(){ //20230330-111130 SimpleDateFormat sim1=new SimpleDateFormat("HH-mm-ss"); //2023-03-30 SimpleDateFormat sim2=new SimpleDateFormat("yyyy-MM-dd"); String photoName = sim1.format(System.currentTimeMillis()); String dirName = sim2.format(System.currentTimeMillis()); List<String> list=new ArrayList<>(); list.add(photoName); list.add(dirName); System.out.println(sim1); return list; } /** * 获取屏幕截图 * @param str:类名下的用例 * @throws IOException */ public void photoTake(String str) throws IOException { List<String> times=getTime(); String fileName="./src/test/autoPic/"+times.get(1)+"/"+str+"-"+times.get(0)+".png"; File screenshotAs = driver.getScreenshotAs(OutputType.FILE); File filename= new File(fileName); FileUtils.copyFile(screenshotAs,filename); } }
package tests; import common.commonDriver; import org.junit.jupiter.api.*; import org.openqa.selenium.By; import org.openqa.selenium.edge.EdgeDriver; import java.io.IOException; /** * 博客列表页相关测试 */ @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class ListPageTest extends commonDriver { private static EdgeDriver driver= getDriver(); @BeforeAll static void getURL() { driver.get("http://150.158.176.179:8080/blog_list.html"); } /** * 验证博客列表页无登录状态下的弹窗警告和重定向功能 */ @Test @Order(1) void alertTest() throws IOException { String text = driver.switchTo().alert().getText(); Assertions.assertEquals("当前您尚未登录! 请登录后再访问!",text); driver.switchTo().alert().accept(); photoTake(getClass().getName()); String sub = driver.findElement(By.cssSelector("#submit")).getAttribute("value"); Assertions.assertTrue("提交".equals(sub)); } @Test @Order(2) void login() throws IOException { driver.findElement(By.cssSelector("#username")).sendKeys("梦里花落谁家"); driver.findElement(By.cssSelector("#password")).sendKeys("123"); driver.findElement(By.cssSelector("#submit")).click(); photoTake(getClass().getName()); } @Test @Order(3) void labelTest1(){ String text = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText(); Assertions.assertEquals("主页",text); } /** * 同一个作者删除按钮是否正常 */ @Test @Order(4) void hyperlinksTest() throws IOException { driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click(); String writerName = driver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText(); if(writerName.equals("梦里花落谁家")){ String text = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(7)")).getText(); Assertions.assertTrue("删除".equals(text)); } driver.navigate().back(); photoTake(getClass().getName()); } /** * 测试注销功能是否正常 */ @Test @Order(5) void labelTest() throws IOException { driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click(); String sub = driver.findElement(By.cssSelector("#submit")).getAttribute("value"); photoTake(getClass().getName()); Assertions.assertTrue("提交".equals(sub)); } @AfterAll static void end(){ driver.quit(); } }
package tests; import common.commonDriver; import org.junit.jupiter.api.*; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import org.openqa.selenium.By; import org.openqa.selenium.edge.EdgeDriver; import java.io.IOException; /** * 博客登录页相关测试 */ @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class LoginPageTest extends commonDriver { private static EdgeDriver driver= getDriver(); @BeforeAll static void getURL(){ driver.get("http://150.158.176.179:8080/blog_login.html"); } /** * 登录页 */ @Test @Order(1) void submitExit(){ String sub = driver.findElement(By.cssSelector("#submit")).getAttribute("value"); Assertions.assertTrue("提交".equals(sub)); } @Test @Order(2) void loginExit(){ String login = driver.findElement(By.cssSelector("body > div.login-container > form > div > h2")).getText(); Assertions.assertTrue("登录".equals(login)); } /** * 点击提交,对应的功能正确 */ @ParameterizedTest @Order(3) @CsvSource(value = {"梦里花落谁家,123","牛马队长,123",}) void submitClick(String username,String pwd) throws InterruptedException, IOException { driver.findElement(By.cssSelector("#username")).sendKeys(username); driver.findElement(By.cssSelector("#password")).sendKeys(pwd); driver.findElement(By.cssSelector("#submit")).click(); Thread.sleep(1000); String text = driver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText(); String text1 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText(); //System.out.println(text); Assertions.assertEquals(username,text); Assertions.assertEquals("注销",text1); driver.navigate().back();//回退到登录页 photoTake(getClass().getName()); driver.findElement(By.cssSelector("#username")).clear();//清除文本 photoTake(getClass().getName()); driver.findElement(By.cssSelector("#password")).clear(); } /** * 错误的用户名或密码 */ @Test @Order(4) void submitClick1() throws IOException { driver.findElement(By.cssSelector("#username")).sendKeys("wangwu"); driver.findElement(By.cssSelector("#password")).sendKeys("123"); driver.findElement(By.cssSelector("#submit")).click(); String body = driver.findElement(By.cssSelector("body > h1")).getText(); Assertions.assertEquals(body,"用户名或密码错误"); photoTake(getClass().getName()); driver.navigate().back();//回退到登录页 } @AfterAll static void end(){ driver.quit(); } }
package tests; import common.commonDriver; import org.junit.jupiter.api.*; import org.openqa.selenium.By; import org.openqa.selenium.edge.EdgeDriver; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class WritePageTest extends commonDriver { private static EdgeDriver driver= getDriver(); @BeforeAll static void getURL() { driver.get("http://150.158.176.179:8080/blog_edit.html"); } /** * 验证未登录状态提交博客是否报错 */ @Test @Order(1) void loginTest(){ String text = driver.switchTo().alert().getText(); Assertions.assertEquals("当前您尚未登录! 请登录后再访问!",text); driver.switchTo().alert().accept(); } @Test @Order(2) void loginAndClick() throws IOException { driver.get("http://150.158.176.179:8080/blog_login.html"); driver.findElement(By.cssSelector("#username")).sendKeys("梦里花落谁家"); driver.findElement(By.cssSelector("#password")).sendKeys("123"); driver.findElement(By.cssSelector("#submit")).click(); photoTake(getClass().getName()); driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click(); } /** * 测试页面展示是否正常 */ @Test @Order(3) void buttonTest(){ String text = driver.findElement(By.cssSelector("#submit")).getAttribute("value"); Assertions.assertEquals("发布文章",text); } /** * 测试缺少必要参数下,提交文章 */ @Test @Order(4) void lackTest() throws IOException { driver.findElement(By.cssSelector("#submit")).click(); String body = driver.findElement(By.cssSelector("body > h1")).getText(); Assertions.assertEquals("缺少参数无法提交博客",body); driver.navigate().back(); photoTake(getClass().getName()); } /** * 测试提交功能 */ @Test @Order(5) void submitTest() throws IOException { SimpleDateFormat sim=new SimpleDateFormat("yyyyMMdd-HHmmss"); String k = sim.format(System.currentTimeMillis())+"测试提交"; driver.findElement(By.cssSelector("#title")).sendKeys(k); photoTake(getClass().getName()); driver.findElement(By.cssSelector("#submit")).click(); photoTake(getClass().getName()); String text = driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText(); Assertions.assertEquals(k,text); } @AfterAll static void end(){ driver.quit(); } }