博客系统项目的自动化测试

news2024/11/14 20:02:47

作者:~小明学编程  

文章专栏:测试开发

格言:热爱编程的,终将被编程所厚爱。
在这里插入图片描述

目录

博客界面

测试用例

界面测试

功能测试

性能测试

兼容性测试

易用性测试

安全性测试

​编辑自动化测试

登录界面的测试

界面文字模块

测试窗口伸缩

测试错误登录案例

测试正确的登录案例

整体代码

博客列表页测试

界面文字模块的测试

测试对编辑页的跳转是否正常

测试对博客编辑页的跳转是否正常

测试注销按钮是否正常

整体代码

博客详情页的测试

界面文字模块的测试

对删除按键的显示与功能进行测试

测试能否成功跳转到博客编辑页

测试能否跳转到主页

测试能否注销登录

整体代码

博客编辑页的测试

测试界面文字

测试发布功能是否正常

测试跳转主页是否正常

测试退出登录是否正常

整体代码

通过 Suite 套件测试


博客界面

 

测试用例

界面测试

 功能测试

性能测试

兼容性测试

易用性测试

安全性测试

自动化测试

下面我们就对上面的部分用例进行自动化的测试。

登录界面的测试

首先我们要先准备好驱动,这里我们采用懒汉模式,然后就是start()方法,该方法我们在所有的测试方法之前执行一次,然后还有close()方法用于关闭浏览器回收驱动,用于在所有的测试方法执行之前来执行。

界面文字模块

该模块用于测试我们的登录界面的一些文字信息是否正确。

    @Test
    @Order(1)
    //先对我们登录界面的一些文字描述进行测试
    public void appearance() {
        start();
        //检测系统名称是否正确
        String str1 = driver.findElement(By.cssSelector("body > div.nav > span")).getText();
        Assertions.assertEquals("我的博客系统",str1);
        //主页,和写博客是否正常
        String str2 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText();
        Assertions.assertEquals("主页",str2);
        //登录窗口的内容
        String str3 = driver.findElement(By.cssSelector("body > div.login-container > form > div > h3")).getText();
        Assertions.assertEquals("登录",str3);
        String str4 = driver.findElement(By.cssSelector
                ("body > div.login-container > form > div > div:nth-child(2) > span")).getText();

        Assertions.assertEquals("用户名",str4);
        String str5 = driver.findElement(By.cssSelector("body > div.login-container > form > div > div:nth-child(3) > span")).getText();
        Assertions.assertEquals("密码",str5);
        String str6 = driver.findElement(By.cssSelector("#submit")).getAttribute("value");
        Assertions.assertEquals("提交",str6);

    }

测试窗口伸缩

    @Test
    @Order(2)
    //测试窗口是否能正常的伸缩
    public void windowSize() {
        driver.manage().window().maximize();
        driver.manage().window().minimize();
        driver.manage().window().setSize(new Dimension(1000,800));//自定义大小
    }

测试错误登录案例

测试错误登录案例这里分为两种一种是账号密码不为空但是不完全正确,还有一种就是账号或者密码存在空值的情况。

    @Order(3)
    @ParameterizedTest
    @CsvSource(value = {"11,22","2334,4566","张三,李四","王五,123"})//分别针对错误账号密码,空账号和空密码进行验证
    //验证我们的错误登录,我们输入几种错误的案例
    public void falseLogin(String name,String password) throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        //处理用户名为空的情况
        driver.findElement(By.cssSelector("#username")).sendKeys(name);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        String test = driver.findElement(By.cssSelector("body")).getText();
        Assertions.assertEquals("用户名或密码错误!",test);
        driver.navigate().back();//跳转回上一个界面
    }
    @Order(4)
    @ParameterizedTest
    @CsvSource(value = {",","123,",",123"})//分别针对空账号空密码,空账号和空密码进行测试
    //验证我们的错误登录,我们输入几种错误的案例
    public void nullLogin(String name,String password) throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        //处理用户名为空的情况
        if (name!=null) {
            driver.findElement(By.cssSelector("#username")).sendKeys(name);
        }
        driver.findElement(By.cssSelector("#password")).clear();
        if (password!=null) {
            driver.findElement(By.cssSelector("#password")).sendKeys(password);
        }
        driver.findElement(By.cssSelector("#submit")).click();
        String test = driver.findElement(By.cssSelector("body")).getText();
        Assertions.assertEquals("当前用户名或密码为空!",test);
        driver.navigate().back();//跳转回上一个界面
    }

测试正确的登录案例

    @Order(5)
    @ParameterizedTest
    @CsvSource(value = {"aaa,123","bbb,456"})
    //验证我们密码正确的情况
    public void trueLogin(String name,String password) throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(name);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        String test = driver.findElement(By.cssSelector("body")).getText();
        driver.navigate().back();//跳转回上一个界面
    }

整体代码

package blogsystem;

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.Dimension;
import org.openqa.selenium.chrome.ChromeDriver;

import java.time.Duration;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86184
 * Date: 2023-01-22
 * Time: 15:51
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class LoginTest {
    private static ChromeDriver driver;
    //这里我们采用懒汉模式
    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }
    @BeforeAll
    public static void start() {
        driver = getDriver();
        driver.get("http://101.42.54.191:8080/blog_system/blog_login.html");
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//等待页面的渲染完成
    }
    @Test
    @Order(1)
    //先对我们登录界面的一些文字描述进行测试
    public void appearance() {
        start();
        //检测系统名称是否正确
        String str1 = driver.findElement(By.cssSelector("body > div.nav > span")).getText();
        Assertions.assertEquals("我的博客系统",str1);
        //主页,和写博客是否正常
        String str2 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText();
        Assertions.assertEquals("主页",str2);
        //登录窗口的内容
        String str3 = driver.findElement(By.cssSelector("body > div.login-container > form > div > h3")).getText();
        Assertions.assertEquals("登录",str3);
        String str4 = driver.findElement(By.cssSelector
                ("body > div.login-container > form > div > div:nth-child(2) > span")).getText();

        Assertions.assertEquals("用户名",str4);
        String str5 = driver.findElement(By.cssSelector("body > div.login-container > form > div > div:nth-child(3) > span")).getText();
        Assertions.assertEquals("密码",str5);
        String str6 = driver.findElement(By.cssSelector("#submit")).getAttribute("value");
        Assertions.assertEquals("提交",str6);

    }
    @Test
    @Order(2)
    //测试窗口是否能正常的伸缩
    public void windowSize() {
        driver.manage().window().maximize();
        driver.manage().window().minimize();
        driver.manage().window().setSize(new Dimension(1000,800));//自定义大小
    }
//    @Test
    @Order(3)
    @ParameterizedTest
    @CsvSource(value = {"11,22","2334,4566","张三,李四","王五,123"})//分别针对错误账号密码,空账号和空密码进行验证
    //验证我们的错误登录,我们输入几种错误的案例
    public void falseLogin(String name,String password) throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        //处理用户名为空的情况
        driver.findElement(By.cssSelector("#username")).sendKeys(name);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        String test = driver.findElement(By.cssSelector("body")).getText();
        Assertions.assertEquals("用户名或密码错误!",test);
        driver.navigate().back();//跳转回上一个界面
    }
    @Order(4)
    @ParameterizedTest
    @CsvSource(value = {",","123,",",123"})//分别针对空账号空密码,空账号和空密码进行测试
    //验证我们的错误登录,我们输入几种错误的案例
    public void nullLogin(String name,String password) throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        //处理用户名为空的情况
        if (name!=null) {
            driver.findElement(By.cssSelector("#username")).sendKeys(name);
        }
        driver.findElement(By.cssSelector("#password")).clear();
        if (password!=null) {
            driver.findElement(By.cssSelector("#password")).sendKeys(password);
        }
        driver.findElement(By.cssSelector("#submit")).click();
        String test = driver.findElement(By.cssSelector("body")).getText();
        Assertions.assertEquals("当前用户名或密码为空!",test);
        driver.navigate().back();//跳转回上一个界面
    }

    @Order(5)
    @ParameterizedTest
    @CsvSource(value = {"aaa,123","bbb,456"})
    //验证我们密码正确的情况
    public void trueLogin(String name,String password) throws InterruptedException {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(name);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        String test = driver.findElement(By.cssSelector("body")).getText();
        driver.navigate().back();//跳转回上一个界面
    }
    @AfterAll
    //所有的测试完了之后关闭驱动
    public static void close() throws InterruptedException {
        Thread.sleep(2000);
        driver.quit();
    }
}

博客列表页测试

在博客列表页中我们主要测试当前列表中的各个文字的显示是否正确,测试对其它页面的跳转是否正常。

界面文字模块的测试

    @Test
    @Order(1)
    //先对我们登录界面的一些文字描述进行测试
    public void appearance() {
        login();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//等待页面的渲染完成
        //检测系统名称是否正确
        String str1 = driver.findElement(By.cssSelector("body > div.nav > span")).getText();
        Assertions.assertEquals("我的博客系统",str1);
        //主页,和写博客是否正常
        String str2 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText();
        Assertions.assertEquals("主页",str2);

        String str3 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText();
        Assertions.assertEquals("注销",str3);
        String str4 = driver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
        Assertions.assertEquals("aaa",str4);//验证用户名
        //验证标签内容是否正确
        String str5 = driver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)")).getText();
        Assertions.assertEquals("文章",str5);
        String str6 = driver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(2)")).getText();
        Assertions.assertEquals("分类",str6);
        String str7 = driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
        Assertions.assertEquals("这是第一篇博客",str7);
        String str8 = driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.date")).getText();
        Assertions.assertEquals("2023-01-14 15:04:13",str8);
        String str9 = driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).getText();
        Assertions.assertEquals("查看全文 >>",str9);


    }

测试对编辑页的跳转是否正常

    //是否能成功的跳转到博客编辑页
    @Test
    @Order(2)
    public void skipDetail() {
        driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertNotEquals("http://101.42.54.191:8080/blog_system/blog_login.html",url);
        driver.navigate().back();//跳转回上一个界面

    }

测试对博客编辑页的跳转是否正常

    @Test
    @Order(3)
    public void skipWrite() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertNotEquals("http://101.42.54.191:8080/blog_system/blog_login.html",url);
        driver.navigate().back();//跳转回上一个界面

    }

测试注销按钮是否正常

    @Test
    @Order(4)
    public void skipQuit() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_login.html",url);

    }

整体代码

package blogsystem;

import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;

import java.time.Duration;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86184
 * Date: 2023-01-22
 * Time: 19:11
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class ListTest {
    private static ChromeDriver driver;
    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }
    @BeforeAll
    public static void start() {
        driver = getDriver();
        driver.get("http://101.42.54.191:8080/blog_system/blog_login.html");
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//等待页面的渲染完成

    }
    public void login() {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys("aaa");
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();
    }
    @Test
    @Order(1)
    //先对我们登录界面的一些文字描述进行测试
    public void appearance() {
        login();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//等待页面的渲染完成
        //检测系统名称是否正确
        String str1 = driver.findElement(By.cssSelector("body > div.nav > span")).getText();
        Assertions.assertEquals("我的博客系统",str1);
        //主页,和写博客是否正常
        String str2 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText();
        Assertions.assertEquals("主页",str2);

        String str3 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText();
        Assertions.assertEquals("注销",str3);
        String str4 = driver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
        Assertions.assertEquals("aaa",str4);//验证用户名
        //验证标签内容是否正确
        String str5 = driver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)")).getText();
        Assertions.assertEquals("文章",str5);
        String str6 = driver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(2)")).getText();
        Assertions.assertEquals("分类",str6);
        String str7 = driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
        Assertions.assertEquals("这是第一篇博客",str7);
        String str8 = driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.date")).getText();
        Assertions.assertEquals("2023-01-14 15:04:13",str8);
        String str9 = driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).getText();
        Assertions.assertEquals("查看全文 >>",str9);


    }
    //是否能成功的跳转到博客编辑页
    @Test
    @Order(2)
    public void skipDetail() {
        driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertNotEquals("http://101.42.54.191:8080/blog_system/blog_login.html",url);
        driver.navigate().back();//跳转回上一个界面

    }

    @Test
    @Order(3)
    public void skipWrite() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertNotEquals("http://101.42.54.191:8080/blog_system/blog_login.html",url);
        driver.navigate().back();//跳转回上一个界面

    }
    //
    @Test
    @Order(4)
    public void skipQuit() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_login.html",url);

    }

    @AfterAll
    //所有的测试完了之后关闭驱动
    public static void close() throws InterruptedException {
        Thread.sleep(2000);
        driver.quit();
    }
}

博客详情页的测试

在博客编辑页我们主要对界面的文字是否正确进行测试,然后对我们的删除按键是否能正确的显示进行测试,还有对各个页面的跳转进行测试。

界面文字模块的测试

    @Test
    @Order(1)
    //先对我们登录界面的一些文字描述进行测试
    public void appearance() {
        login();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//等待页面的渲染完成
        //检测系统名称是否正确
        String str1 = driver.findElement(By.cssSelector("body > div.nav > span")).getText();
        Assertions.assertEquals("我的博客系统",str1);
        //主页,和写博客是否正常
        String str2 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText();
        Assertions.assertEquals("主页",str2);

        String str3 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText();
        Assertions.assertEquals("注销",str3);
        //验证标签内容是否正确
        String str5 = driver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)")).getText();
        Assertions.assertEquals("文章",str5);
        String str6 = driver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(2)")).getText();
        Assertions.assertEquals("分类",str6);

    }

对删除按键的显示与功能进行测试

    @Test
    @Order(2)
    //验证我们的删除按钮是否能正常的显示并且使用
    public void delete() {
//        login();
        String name = driver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
        //如果当前的博客用户名与登录用户名一致删除按钮应该存在
        if ("bbb".equals(name)) {
            String delete = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(7)")).getText();
            Assertions.assertEquals("删除",delete);
        } else {
            try{
                String delete = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(7)")).getText();
            }catch (Exception e) {
                System.out.println("找不到删除键");
            }
        }
    }

测试能否成功跳转到博客编辑页

    //是否能成功的跳转到博客编辑页
    @Test
    @Order(3)
    public void skipWrite() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_edit.html",url);
        driver.navigate().back();//跳转回上一个界面

    }

测试能否跳转到主页

    @Test
    @Order(4)
    public void skipMain() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_list.html",url);
        driver.navigate().back();//跳转回上一个界面
    }

测试能否注销登录

    @Test
    @Order(5)
    public void skipQuit() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_login.html",url);

    }

整体代码

package blogsystem;

import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;

import java.time.Duration;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86184
 * Date: 2023-01-22
 * Time: 21:04
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class DetailTest {
    private static ChromeDriver driver;
    private String name;//用户名
    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }
    @BeforeAll
    public static void start() {
        driver = getDriver();
        driver.get("http://101.42.54.191:8080/blog_system/blog_login.html");
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//等待页面的渲染完成

    }
    public void login() {
        String name = "bbb";
        this.name = name;
        System.out.println(this.name);
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(name);
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys("456");
        driver.findElement(By.cssSelector("#submit")).click();
        //切换到博客详情页
        driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
    }
    @Test
    @Order(1)
    //先对我们登录界面的一些文字描述进行测试
    public void appearance() {
        login();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//等待页面的渲染完成
        //检测系统名称是否正确
        String str1 = driver.findElement(By.cssSelector("body > div.nav > span")).getText();
        Assertions.assertEquals("我的博客系统",str1);
        //主页,和写博客是否正常
        String str2 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText();
        Assertions.assertEquals("主页",str2);

        String str3 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText();
        Assertions.assertEquals("注销",str3);
        //验证标签内容是否正确
        String str5 = driver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)")).getText();
        Assertions.assertEquals("文章",str5);
        String str6 = driver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(2)")).getText();
        Assertions.assertEquals("分类",str6);

    }
    @Test
    @Order(2)
    //验证我们的删除按钮是否能正常的显示并且使用
    public void delete() {
//        login();
        String name = driver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();
        //如果当前的博客用户名与登录用户名一致删除按钮应该存在
        if ("bbb".equals(name)) {
            String delete = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(7)")).getText();
            Assertions.assertEquals("删除",delete);
        } else {
            try{
                String delete = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(7)")).getText();
            }catch (Exception e) {
                System.out.println("找不到删除键");
            }
        }
    }
    //是否能成功的跳转到博客编辑页
    @Test
    @Order(3)
    public void skipWrite() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_edit.html",url);
        driver.navigate().back();//跳转回上一个界面

    }
    @Test
    @Order(4)
    public void skipMain() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_list.html",url);
        driver.navigate().back();//跳转回上一个界面
    }
    @Test
    @Order(5)
    public void skipQuit() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_login.html",url);

    }
    @AfterAll
    //所有的测试完了之后关闭驱动
    public static void close() throws InterruptedException {
        Thread.sleep(2000);
        driver.quit();
    }
}

博客编辑页的测试

测试界面文字

    @Test
    @Order(1)
    //先对我们登录界面的一些文字描述进行测试
    public void appearance() {
        login();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//等待页面的渲染完成
        //检测系统名称是否正确
        String str1 = driver.findElement(By.cssSelector("body > div.nav > span")).getText();
        Assertions.assertEquals("我的博客系统",str1);
        //主页,和写博客是否正常
        String str2 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText();
        Assertions.assertEquals("主页",str2);

        String str3 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText();
        Assertions.assertEquals("注销",str3);

        String str4 = driver.findElement(By.cssSelector("#submit")).getAttribute("value");
        Assertions.assertEquals("发布文章",str4);

        String str5 = driver.findElement(By.cssSelector("#title")).getAttribute("placeholder");
        Assertions.assertEquals("在此处输入标题",str5);
    }

测试发布功能是否正常

    @Test
    @Order(3)
    public void publish() {
        driver.findElement(By.cssSelector("#title")).sendKeys("这是第三篇博客");
        driver.findElement(By.cssSelector("#submit")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        //若发布成功则会跳转到博客列表页
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_list.html",url);
        driver.navigate().back();//跳转回上一个界面
    }

测试跳转主页是否正常

    @Test
    @Order(2)
    public void skipMain() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_list.html",url);
        driver.navigate().back();//跳转回上一个界面
    }

测试退出登录是否正常

    @Test
    @Order(4)
    public void skipQuit() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_login.html",url);

    }

整体代码

package blogsystem;

import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;

import java.time.Duration;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86184
 * Date: 2023-01-22
 * Time: 23:08
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class editTest {
    private static ChromeDriver driver;
    private static ChromeDriver getDriver() {
        if (driver == null) {
            driver = new ChromeDriver();
            //隐式等待
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        }
        return driver;
    }
    @BeforeAll
    public static void start() {
        driver = getDriver();
        driver.get("http://101.42.54.191:8080/blog_system/blog_login.html");
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//等待页面的渲染完成

    }
    public void login() {
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys("bbb");
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password")).sendKeys("456");
        driver.findElement(By.cssSelector("#submit")).click();
        //切换到博客编辑页
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
    }
    @Test
    @Order(1)
    //先对我们登录界面的一些文字描述进行测试
    public void appearance() {
        login();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));//等待页面的渲染完成
        //检测系统名称是否正确
        String str1 = driver.findElement(By.cssSelector("body > div.nav > span")).getText();
        Assertions.assertEquals("我的博客系统",str1);
        //主页,和写博客是否正常
        String str2 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText();
        Assertions.assertEquals("主页",str2);

        String str3 = driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText();
        Assertions.assertEquals("注销",str3);

        String str4 = driver.findElement(By.cssSelector("#submit")).getAttribute("value");
        Assertions.assertEquals("发布文章",str4);

        String str5 = driver.findElement(By.cssSelector("#title")).getAttribute("placeholder");
        Assertions.assertEquals("在此处输入标题",str5);
    }
    @Test
    @Order(2)
    public void skipMain() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_list.html",url);
        driver.navigate().back();//跳转回上一个界面
    }
    @Test
    @Order(3)
    public void publish() {
        driver.findElement(By.cssSelector("#title")).sendKeys("这是第三篇博客");
        driver.findElement(By.cssSelector("#submit")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        //若发布成功则会跳转到博客列表页
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_list.html",url);
        driver.navigate().back();//跳转回上一个界面
    }
    @Test
    @Order(4)
    public void skipQuit() {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        String curWindow = driver.getWindowHandle();//获取当前的句柄
        Set<String> windows = driver.getWindowHandles();//获取所有的句柄
        for (String window:windows) {
            if (window!=curWindow) {
                driver.switchTo().window(window);//切换到点击后的句柄
            }
        }
        String url = driver.getCurrentUrl();//获取当前页面的url然后与博客详情页的页面url做对比看看页面是否切换成功
        Assertions.assertEquals("http://101.42.54.191:8080/blog_system/blog_login.html",url);

    }
    @AfterAll
    //所有的测试完了之后关闭驱动
    public static void close() throws InterruptedException {
        Thread.sleep(2000);
        driver.quit();
    }
}

通过 Suite 套件测试

package com.auto;

import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86184
 * Date: 2023-01-21
 * Time: 22:25
 */
@Suite
@SelectPackages("com.auto")
public class RunAll {
    
}

 测试全部通过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/176778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu使用教程与常用命令

ubuntu使用教程 一、 Ubuntu简介 Ubuntu&#xff08;乌班图&#xff09;是一个基于Debian的以桌面应用为主的Linux操作系统&#xff0c;据说其名称来自非洲南部祖鲁语或科萨语的“ubuntu”一词&#xff0c;意思是“人性”、“我的存在是因为大家的存在”&#xff0c;是非洲传…

Python爬虫之Scrapy框架系列(5)——项目实战【某瓣Top250电影所有信息的txt文本存储】

上篇文章已经成功解析提取到豆瓣Top250电影想要的所有数据。下一步就是将其交给管道进行存储。 目录&#xff1a;1. 编写items.py文件&#xff08;定义结构化数据字段&#xff09;2. 爬虫文件里将数据一一对应字段名&#xff1a;3. 将数据返回给管道&#xff1a;4. 编写pipelin…

MCAL系列介绍04-ICU

本文框架1. 前言2. 基本概念3. ICU采集过程3.1 获取周期占空比3.2 获取边沿数量3.3 获取时间戳4. Autosar系列文章快速链接1. 前言 ICU驱动器是使用Input Capture Uint模块&#xff08;ICU&#xff09;解调PWM信号、计数脉冲、测量频率和占空比、生成简单中断以及唤醒中断的模…

树莓派配置Python虚拟环境、安装PyQt5、安装PySide2

要从头设置好一台可用于开发的树莓派&#xff0c;可以参考树莓派 4B 无屏幕&#xff0c;连接WiFi、SSH、VNC&#xff0c;系统换源、pip换源&#xff0c;安装中文输入法 Python虚拟环境 树莓派&#xff08;或者说arm平台&#xff09;使用Python虚拟环境的正确方式是使用pipenv…

【手写 Vue2.x 源码】第三十九篇 - 组件部分 - 创建组件虚拟节点

一&#xff0c;前言 上篇&#xff0c;介绍了组件部分-组件的合并&#xff0c;主要涉及以下几个点&#xff1a; 组件初始化情况&#xff1b;组件合并的位置&#xff1b;组件合并的策略&#xff1b;组件合并后测试&#xff1b; 本篇&#xff0c;组件部分-组件的编译&#xff1…

【C语言】对<进阶版三子棋>的完善和改进

这篇文章主要是对前面三子棋游戏的完善和改进。 文章目录 目录 1.将棋子*和#&#xff0c;改为1和0&#xff1b; 2.电脑下棋显示坐标 3.可以选择电脑先手或玩家先手 4.在退出游戏时显示游戏信息 5.完善后的游戏效果 二、完整程序代码 1.game.h 2.test.c 3.game.c 总结 前言 h…

【教程】虚拟环境与Pytorch安装

【教程】虚拟环境与Pytorch安装NVIDIA驱动安装虚拟环境创建激活/删除相关库的安装Pytorch安装安装地址可能遇到的问题处理报错安装卡顿测试是否安装完成参考NVIDIA驱动安装 NVIDIA驱动可在官网进行安装&#xff1a;NVIDIA驱动官网 命令行输入nvidia-smi可查看cuda版本等信息&…

Linux常用命令——ss命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) ss 比 netstat 好用的socket统计信息&#xff0c;iproute2 包附带的另一个工具&#xff0c;允许你查询 socket 的有关统计信息。 补充说明 ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket…

XGBoost的原理、工程实现与优缺点

Xgboost简介 XGBoost是陈天奇等人开发的一个开源机器学习项目&#xff0c;高效地实现了GBDT算法并进行了算法和工程上的许多改进&#xff0c;被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。XGBoost本质上还是一个GBDT&#xff0c;但是力争把速度和效率发…

C++普通类,派生类,虚基类的成员构造顺序以及构造函数调用顺序详解

目录前言普通类构造析构顺序解析依赖关系产生的错误派生类构造析构顺序解析扩展菱形多继承场景含虚基类的派生类构造析构顺序解析扩展菱形多继承场景(引入虚继承)前言 C规定“对象的析构过程必须与其构造过程相反”这一语法规则。 因此我们研究透彻了构造过程&#xff0c;那么…

宕机了,Redis如何避免数据丢失?

今天是大年初一&#xff0c;祝大家新年快乐&#xff0c;新的一年技术增进&#xff0c;工资翻倍。 目前&#xff0c;Redis的持久化主要有两大机制&#xff0c;即AOF日志和RDB快照&#xff0c;在接下来的两节课里&#xff0c;我们就分别学习一下吧。 AOF日志是如何实现的&#…

结构型模式-装饰器模式

1.概述 快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加配菜需要额外加钱&#xff0c;每个配菜的价钱通常不太一样&#xff0c;那么计算总价就会显得比较麻烦。 使用继承的方式存在的问题&#xff1a; 扩展性不好 如果要再加…

Alibaba微服务组件Sentinel学习笔记

1 .Sentinel 是什么 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件&#xff0c;主要以 流量为切入点&#xff0c;从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的…

一篇读懂图神经网络

来源&#xff1a;投稿 作者&#xff1a;张宇 编辑&#xff1a;学姐 近年来&#xff0c;作为一项新兴的图数据学习技术&#xff0c;图神经网络&#xff08;GNN&#xff09;受到了非常广泛的关注&#xff0c;在各大顶级学术会议上&#xff0c;图神经网络相关的论文也占了相当可观…

https://app.diagrams.net/在线画图的一些技巧

最近工作需要,实践了在线画图的case, 下面就把使用心得记录一下: 关于diagrams 的一些小技巧: 登入的网页是:Flowchart Maker & Online Diagram Software 1: 利用group 的选项,这个可以整体移动,不用担心会漏掉一个: 就是选中一个图标,然后,看右边arrange 下面…

20230123使AIO-3568J开发板在Android12下永不休眠

20230123使AIO-3568J开发板在Android12下永不休眠 2023/1/23 13:59 1、 Z:\android12-rk3568-new\device\rockchip\common\device.mk # Bluetooth HAL PRODUCT_PACKAGES \ libbt-vendor \ android.hardware.bluetooth1.0-impl \ android.hardware.bluetooth1.0-se…

Hadoop基础之《(1)—大数据基本概念》

一、Hadoop 1、Hadoop大数据框架&#xff0c;处理分布式环境下数据存储和计算 2、Hadoop的HDFS处理存储 3、Hadoop的MapReduce处理计算 map让任务数据拆分到每一台去执行 reduce处理后的任务合并 4、Hive作用是在Hadoop上能够让用户来写SQL处理数据 Hive的执行引擎&#xff0c;…

深度学习TensorFlow—GPU2.4.0版环境配置,一文简单易懂详细大全,CUDA11.0、cuDNN8.0

深度学习TensorFlow—GPU2.4.0版环境配置&#xff0c;一文简单易懂详细大全&#xff0c;CUDA11.0、cuDNN8.0 前提&#xff1a;电脑拥有英伟达独立显卡!!!&#xff0c;并且安装了anaconda&#xff01;&#xff01;&#xff01; 前提&#xff1a;电脑拥有英伟达独立显卡!!!&…

vue事件车之兄弟组件之间传值

目录前言一&#xff0c;全局事件总线介绍1.1 原理介绍1.2 x需要满足的条件二&#xff0c;知识点的复习2.1 vc是什么2.2 vm管理vc如何体现2.3 原型2.4 上述知识的串联三&#xff0c;实现需求3.1 x的编写及讲解3.2 使用x四&#xff0c;标准写法4.1 写法改动4.2 销毁五 关键代码后…

兔年首文迎新春-Cesium橘子洲烟花礼赞

兔年新春今天是兔年大年初二&#xff0c;神州大地&#xff0c;在经历了疫情的三年后迎来开放的一个春节。大家都沉浸在欢乐幸福的春节气氛中。玉兔迎新春&#xff0c;祝福齐送到&#xff1a;白兔祝你身体安康&#xff0c;黑兔祝你薪水高涨&#xff0c;灰兔送你梦想如意&#xf…