当前位置: 首页 > news >正文

博客系统自动化测试

目录

相关链接

一、项目背景

二、测试计划

 1.测试用例

 2.结构设计

2.1Utils类

3.测试登录页面

4.测试列表页面 

5. 测试详情页面

6.测试编辑页面

测试结果:

整体测试结果 :


相关链接

博客系统代码:spring-blogs · jialixuan/博客系统 - 码云 - 开源中国

自动化测试代码/性能测试报告:​​​​​​​​​​BlogAutoTest · jialixuan/博客系统 - 码云 - 开源中国

已上线博客地址:http://8.140.60.17:8080/blog_login.html

一、项目背景

  对于一个程序员来说,定期整理总结并写博客是不可或缺的步骤,在学习技术的过程中,总是学一点忘一点,如果把学习的过程记录在一个网站上,自己在学习技术的时候就能访问该网站,进行回顾、复习,回顾大学学习技术这里,我发现不管当时记忆多么深刻,到一定时间后,都会忘得一干二净。

二、测试计划

针对个人博客项目进行测试,个人博客主要由四个页面构成:登录页、列表页、详情页和编辑页,主要功能包括:登录、编辑并发布博客、查看详情、删除博客以及注销等功能。对于个人博客的测试就是针对主要功能进行测试。

 1.测试用例

     下面根据编写的测试用例对功能测试一一进行自动化测试

 2.结构设计

2.1Utils类

package com.example.blogautotest.common;



import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;


public class Utils {
    public static WebDriver driver;

    //创建驱动对象
    public static WebDriver createDriver()
    {
        if(driver == null)
        {
            WebDriverManager.chromedriver().setup();
            ChromeOptions options = new ChromeOptions();
            //允许访问所有的链接
            options.addArguments("--remote-allow-origins=*");

            driver = new ChromeDriver(options);

            //隐式等待(全局情况,查找元素的时候都让它等待2秒)
//            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
        }
        return driver;
    }

    public Utils(String url)
    {
        //调用driver对象
        driver = createDriver();
        //访问url
        driver.get(url);
    }
    public void printscreen(String test) throws NoSuchMethodException, IOException {
        //屏幕截图
        SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");

        String dirTime = sim1.format(System.currentTimeMillis());
        String fileTime = sim2.format(System.currentTimeMillis());



        String filename ="./src/test/java/com/example/blogautotest/image/"+ dirTime +"/"+test +"-" + fileTime+".png";
        System.out.println("filename:"+filename);

        File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        //srcFile放到指定位置
        FileUtils.copyFile(srcFile,new File(filename));
    }
}

3.测试登录页面

 严格按照测试用例进行

  1. 是否能正常打开页面
  2. 登录失败 所有用例
  3. 登录成功 所有用例 

代码: 

package com.example.blogautotest.test;

import com.example.blogautotest.common.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.IOException;

public class LoginPage extends Utils {
    // 登录页面的url
    public static final String url  ="http://8.140.60.17:8080/blog_login.html";
    //创建显示等待对象
    private WebDriverWait wait = new WebDriverWait(driver, java.time.Duration.ofSeconds(20));
    // 初始化页面
    public LoginPage(){
        super(url);
    }
    public void check() throws IOException, NoSuchMethodException, InterruptedException {
        //1.查看是否正常打开页面
        loginFail();
        //2.登录成功
        loginSuccess();
        //3.登录失败
        loginFail();
    }
    //1.查看是否正常打开页面
    private void login() throws IOException, NoSuchMethodException {
        //1)
        // 获取页面的Url
        String CurUrl = driver.getCurrentUrl();
        // 判断是否与url一致
        Assertions.assertEquals(this.url, CurUrl);
       //2)
        //检查logo图片元素
        Assertions.assertNotNull(driver.findElement(By.cssSelector("body > div.nav > img")));
        //检查“博客系统”字样
        Assertions.assertNotNull(driver.findElement(By.cssSelector("body > div.nav > span")));
        //检查是否有输入框、提交按钮
        Assertions.assertNotNull(driver.findElement(By.cssSelector("#username")));    //用户名框
        Assertions.assertNotNull(driver.findElement(By.cssSelector("#password")));//密码框
        Assertions.assertNotNull(driver.findElement(By.cssSelector("#submit")));//提交按钮


    }
    //2.登录成功
    private void loginSuccess() throws IOException, NoSuchMethodException, InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear(); //清空输入框
        driver.findElement(By.cssSelector("#password")).clear(); //清空输入框
        driver.findElement(By.cssSelector("#username")).sendKeys("西贝"); //在输入框中输入用户名
        driver.findElement(By.cssSelector("#password")).sendKeys("123456"); //在输入框中输入密码
        driver.findElement(By.cssSelector("#submit")).click(); //点击提交按钮
        Thread.sleep(500);
        //检查是否跳转到blog_list.html
        Assertions.assertEquals("http://8.140.60.17:8080/blog_list.html",driver.getCurrentUrl());

        driver.navigate().back(); //返回上一页
        driver.findElement(By.cssSelector("#username")).clear(); //清空输入框
        driver.findElement(By.cssSelector("#password")).clear(); //清空输入框
        driver.findElement(By.cssSelector("#username")).sendKeys("西贝贝"); //在输入框中输入用户名
        driver.findElement(By.cssSelector("#password")).sendKeys("123456"); //在输入框中输入密码
        driver.findElement(By.cssSelector("#submit")).click(); //点击提交按钮
        Thread.sleep(500);
        //检查是否跳转到blog_list.html
        Assertions.assertEquals("http://8.140.60.17:8080/blog_list.html",driver.getCurrentUrl());
        //点击注销按钮
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();

    }
    //3.登录失败
    private void loginFail() throws IOException, NoSuchMethodException, InterruptedException {

//        driver.navigate().back(); //返回上一页
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#username"))).clear();//清空输入框
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#password"))).clear();//清空输入框
        //情况一 账号错误 密码正确
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#username"))).sendKeys("11");//在输入框中输入用户名
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#password"))).sendKeys("123456"); //在输入框中输入密码
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit"))).click();//点击提交按钮
        Alert alert = wait.until(ExpectedConditions.alertIsPresent());
        Assertions .assertEquals("用户不存在",alert.getText());
        alert.accept();

        driver.findElement(By.cssSelector("#username")).clear(); //清空输入框
        driver.findElement(By.cssSelector("#password")).clear(); //清空输入框
        //情况一 账号错误 密码正确
        driver.findElement(By.cssSelector("#username")).sendKeys("西贝"); //在输入框中输入用户名
        driver.findElement(By.cssSelector("#password")).sendKeys("1"); //在输入框中输入密码
        driver.findElement(By.cssSelector("#submit")).click(); //点击提交按钮
        Thread.sleep(500);
        alert = wait.until(ExpectedConditions.alertIsPresent());
        Assertions .assertEquals("密码错误",alert.getText());
        alert.accept();

//        driver.quit();
    }
}

测试结果:

4.测试列表页面 

  1.  测试未登录状态下的博客列表页面
  2.  测试已登录状态下的布局的一致性
  3.  测试列表页面中的按钮
  4.  测试注销功能

 代码:

package com.example.blogautotest.test;


import com.example.blogautotest.common.Utils;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.IOException;
import java.time.Duration;

public class ListPage extends Utils {
    // 列表页面的url
    private static String listUrl = "http://8.140.60.17:8080/blog_list.html";
    // 创建一个显式等待对象
    private WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));
    public ListPage() throws IOException, NoSuchMethodException {
        super(listUrl);
    }
    public void checkList() throws InterruptedException, IOException, NoSuchMethodException {
        //测试未登录状态下的博客列表页面
        ListNotLogin();
        //测试已登录状态下布局的一致性
        ListByLogin();
        //测试查看全文按钮和点击写博客按钮和GitHub按钮
        ListCheckButton();
        //测试注销功能
        ListCheckQuit();

    }
    private void ListNotLogin() throws InterruptedException {

        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit")));
    }

    private void ListByLogin() throws IOException, NoSuchMethodException, InterruptedException {
        // 清除用户名和密码输入框
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入指定的用户名和密码
        driver.findElement(By.cssSelector("#username")).sendKeys("西贝");
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");
        // 点击登录按钮
        driver.findElement(By.cssSelector("#submit")).click();
        // 截取屏幕图像
        printscreen("ListByLogin");



        try {
            // 等待导航元素出现,包括文本和图像,确保页面已加载到可以进行交互的状态
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > span")));
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > img")));
        
            // 确保URL包含预期的列表页面URL部分,以验证页面正确加载
            wait.until(ExpectedConditions.urlContains(listUrl));
        
            // 等待左侧栏的特定元素出现,以验证博客列表页面的关键内容已加载
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)")));
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(2)")));
        
            // 等待左侧栏的标题和图像元素出现,进一步验证页面内容的正确性
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.left > div > h3")));
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.left > div > img")));
        
            // 如果所有预期元素都出现,打印成功验证的消息
            System.out.println("验证博客列表页面成功");
        } catch (TimeoutException e) {
            // 如果在规定时间内未找到指定元素,捕获TimeoutException并打印错误消息
            System.out.println("在规定时间内未找到指定元素:" + e.getMessage());
        }
    }
    //
    private void ListCheckButton() throws IOException, NoSuchMethodException, InterruptedException {

        try {
            // 点击查看全文按钮和点击写博客按钮
            // 解释:此部分代码等待特定元素出现并点击,以验证页面功能的可操作性
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a"))).click();
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)")));
        
            // 返回上一页,点击导航栏的第五个链接和提交按钮
            // 解释:此部分代码模拟用户返回并选择导航栏中的其他选项,以测试页面导航功能
            driver.navigate().back();
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > a:nth-child(5)"))).click();
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit")));
        
            // 返回上一页,点击Gitee链接
            // 解释:此部分代码模拟用户返回并点击GitHub链接,以验证外部链接功能
            driver.navigate().back();
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.left > div > a"))).click();
            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-t > div > div.user-profile-head-info-rr > div.user-profile-head-info-r-t > div.user-profile-head-name > div:nth-child(1)")));
            driver.navigate().back();
            System.out.println("点击 全文按钮、写博客按钮、GitHub按钮 均正常运行"); 
        } catch (TimeoutException e) {
            // 处理超时异常,打印错误信息
            // 解释:此部分代码捕获超时异常,并输出错误信息,以方便问题定位
            System.out.println("规定时间内未找到指定元素:" + e.getMessage());
        }
    }
    //点击注销按钮  验证结果:跳转到博客登录界面
    private void ListCheckQuit() {
        try {
            driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
            driver.findElement(By.cssSelector("#username"));
            driver.findElement(By.cssSelector("#password"));
            System.out.println("退出成功");
        } catch (Exception e) {
            System.out.println("退出失败");
        }
    }
}

测试结果:

5. 测试详情页面

  1.  测试未登录状态下的博客详情页面
  2.  测试已登录状态下的布局的一致性
  3.  测试详情页面中的按钮
  4.  测试注销功能

代码:

package com.example.blogautotest.test;

import com.example.blogautotest.common.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.IOException;
import java.time.Duration;

public class DetailPage extends Utils {
    //博客详情页面的url
    public static final String url = "http://8.140.60.17:8080/blog_detail.html";
    //创建显示等待对象
    private WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    public DetailPage(){
        super(url);
    }
    public void check() throws InterruptedException, IOException, NoSuchMethodException {
        DetailNotLogin();
        DetailBylogin();
        DetailButton();
        DetailCheckQuit();
    }
    //测试未登录状态下的博客详情页面
    public void DetailNotLogin() throws InterruptedException {
        Thread.sleep(2000);
        wait.until(ExpectedConditions.urlToBe("http://8.140.60.17:8080/blog_login.html"));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit")));
    }
    //测试布局的一致性
    public void DetailBylogin(){
        //1.在登录页面输入账号密码并点击登录
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#username"))).sendKeys("西贝");
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#password"))).sendKeys("123456");
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit"))).click();
        //2.点击查看全文跳转到博客详情页面
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a"))).click();
        //3.查看布局的一致性
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div > div.title"))); //文章标题
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div > div.date"))); //发布文章时间
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#detail > p > a")));//文章内容
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)")));//文章编辑按钮
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)")));//文章删除按钮

    }
    //测试博客详情页面的按钮可用性
    private void DetailButton() throws InterruptedException, IOException, NoSuchMethodException {
        // 点击主页
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > a:nth-child(4)"))).click();
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")));
        driver.navigate().back();
        //点击写博客按钮
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > a:nth-child(5)"))).click();
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#editor > div.editormd-toolbar > div > ul > li:nth-child(25) > a")));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit")));
        driver.navigate().back();
        //点击Gitee
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.left > div > a"))).click();
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#userSkin > div.user-profile-head > div.user-profile-head-info > div.user-profile-head-info-t > div > div.user-profile-head-info-rr > div.user-profile-head-info-r-t > div.user-profile-head-name > div:nth-child(1)")));
        driver.navigate().back();
        //点击编辑
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)"))).click();
        wait.until(ExpectedConditions.titleIs("博客编辑页"));
        driver.navigate().back();
        //点击删除
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)"))).click();
        Alert alert = driver.switchTo().alert();
        String text = alert.getText();
        Assertions.assertEquals("确定删除?",text);
        alert.dismiss();
    }
    //点击注销按钮  验证结果:跳转到博客登录界面
    private void DetailCheckQuit() {
        try {
            driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
            driver.findElement(By.cssSelector("#username"));
            driver.findElement(By.cssSelector("#password"));
            System.out.println("退出成功");
        } catch (Exception e) {
            System.out.println("退出失败");
        }
    }
}

测试结果:

 

6.测试编辑页面

  1.  测试未登录状态下的博客编辑页面
  2.  测试已登录状态下的布局的一致性
  3.  测试详情页面中的按钮
  4. 测试发布成功用例
  5. 测试发布失败用例
  6. 测试注销功能

代码:

package com.example.blogautotest.test;

import com.example.blogautotest.common.Utils;
import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.IOException;
import java.time.Duration;

public class EditPage extends Utils {
    //博客编辑页面url
    private static final String url = "http://8.140.60.17:8080/blog_edit.html";
    //创建显示等待对象
    private WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    public EditPage(){
        super(url);
    }
    public void check() throws InterruptedException, IOException, NoSuchMethodException {
        EditNotLogin(); //测试未登录状态下的博客编辑页面
        EditLogin(); //测试已登录状态下的布局的一致性
        EditButton(); //测试详情页面中的按钮
        PublishSucceed(); //测试发布成功用例
        Publishfail(); //测试发布失败用例
        EditCheckQuit(); //测试注销功能
    }
    //测试未登录状态下的博客编辑页面
    private void EditNotLogin() throws InterruptedException, IOException, NoSuchMethodException {

        Alert alert = wait.until(ExpectedConditions.alertIsPresent());
        alert.accept();
        printscreen("EditNotLogin");
        wait.until(ExpectedConditions.urlToBe("http://8.140.60.17:8080/blog_login.html"));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit")));


    }
    //测试布局的一致性
    private void EditLogin() throws InterruptedException, IOException, NoSuchMethodException {
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#username"))).sendKeys("西贝");
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#password"))).sendKeys("123456");
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit"))).click();
        Thread.sleep(500);
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(" body > div.nav > a:nth-child(5)"))).click();
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > span"))); //
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > img"))); //
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit"))); //发布按钮
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#editor > div.editormd-toolbar > div > ul")));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#editor > div.editormd-toolbar > div > ul > li:nth-child(1) > a > i")));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > a:nth-child(4)")));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > a:nth-child(5)")));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > a:nth-child(6)")));
    }

    private void EditButton() throws IOException, NoSuchMethodException {
        // 点击主页
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > a:nth-child(4)"))).click();
        printscreen("EditButton");
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")));
        driver.navigate().back();
        //点击写博客按钮
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > a:nth-child(5)"))).click();
        printscreen("EditButton");
        wait.until(ExpectedConditions.urlToBe(url));
    }
    //发布文章成功
    private void PublishSucceed() throws IOException, NoSuchMethodException, InterruptedException {

        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#title"))).sendKeys("自动化测试标题");
        driver.findElement(By.cssSelector("#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll >" +
                " div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span"));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit"))).click();

    }
    //发布文章失败
    private void Publishfail() throws IOException, NoSuchMethodException, InterruptedException {
        //
        Thread.sleep(500);
        //点击写博客按钮
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.nav > a:nth-child(5)"))).click();
        //1.未填写标题

        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#title"))).clear();

        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit"))).click();

        Alert alert = wait.until(ExpectedConditions.alertIsPresent());

        Assertions .assertEquals("标题不能为空!",alert.getText());
        alert.accept();

        //2.未填写内容

        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#title"))).clear();
        driver.findElement(By.cssSelector("#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div:nth-child(2)"));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit"))).click();

        alert = wait.until(ExpectedConditions.alertIsPresent());

        Assertions .assertEquals("标题不能为空!",alert.getText());
        alert.accept();
        //3.未填写标题和内容

        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#title"))).clear();
        driver.findElement(By.cssSelector("#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll >" +
                " div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span"));
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#submit"))).click();
        alert = wait.until(ExpectedConditions.alertIsPresent());
        Assertions .assertEquals("标题不能为空!",alert.getText());
        alert.accept();
        driver.quit();
    }
    //点击注销按钮  验证结果:跳转到博客登录界面
    private void EditCheckQuit() {
        try {
            driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
            driver.findElement(By.cssSelector("#username"));
            driver.findElement(By.cssSelector("#password"));
            System.out.println("退出成功");
        } catch (Exception e) {
            System.out.println("退出失败");
        }
    }
}

测试结果:

整体测试结果 :

 

相关文章:

  • 20 | 如何添加单元测试用例
  • Hadoop 集群部署与配置详解
  • python-leetcode-K 和数对的最大数目
  • 基于Redis实现限流
  • 本地Git仓库搭建(DevStar)与Git基本命令
  • 设计模式之工厂模式
  • 从零开始用AI开发游戏(二)
  • VUE面试题
  • 寻路网格简介
  • 基于django+vue的购物商城系统
  • Python基础之threading多线程同时运行程序
  • 开源链动2+1模式AI智能名片S2B2C商城小程序在KOC参与门店做透中的应用探索
  • 黑马程序员javaweb案例---初识管理系统(spring-boot)
  • Flutter:进度条封装
  • Python精进系列: isinstance 函数
  • 基于SpringBoot的“考研互助平台”的设计与实现(源码+数据库+文档+PPT)
  • 【Pandas】pandas Series asof
  • python可视化开源库
  • 在windows10系统上搭建npm仓库源
  • uni-app如何发布项目为app_2025
  • 湖南建设工程竣工备案表查询网站/怎么搭建自己的网站
  • 济南网站建设求职/网站建设黄页免费观看
  • 大专生毕业论文怎么写/广州网站优化多少钱
  • html5标准网站建设/百度小说排行榜2020
  • 域名到期换个公司做网站/怎么去推广一个app
  • 寮步镇做网站/网站免费制作平台