基于SSM前后端分离版本的论坛系统-自动化测试

目录

前言

一、测试环境

二、环境部署

三、测试用例

四、执行测试

4.1、公共类设计

创建浏览器驱动对象

测试套件

释放驱动类

4.2、功能测试

注册页面

登录页面

版块

 帖子

用户个人中心页

站内信

4.3、界面测试

注册页面

登录页面

版块

帖子

用户个人中心页

站内信


前言

        个人论坛系统是一种在线社交平台,为用户提供了丰富的功能,让他们能够轻松地创建帖子、分享信息、讨论话题以及互动交流。

        在开发阶段,实时进行了单元测试,所以本文章主要进行自动化测试(功能、界面),分为设计测试用例和进行测试两方面。

一、测试环境

操作系统:Window11专业版

项目运行环境:IntelliJ IDEA 2022.3.3、JDK1.8、MySQL5.7

浏览器:Chrome、Microsoft Edge

浏览器驱动:ChromeDriver、EdgeDriver

web自动化测试工具:selenium4

单元测试框架:Junit5

测试技术:主要进行功能与界面方面的自动化测试

二、环境部署

在pom.xml中部署

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>3.0.0</version>
            <scope>test</scope>
        <dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
			<version>4.10.0</version>
		</dependency>
		<!--保存屏幕截图文件所要用到的包        -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter</artifactId>
			<version>5.8.2</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.junit.platform</groupId>
			<artifactId>junit-platform-suite</artifactId>
			<version>1.8.2</version>
			<scope>test</scope>
		</dependency>

三、测试用例

四、执行测试

4.1、公共类设计

创建浏览器驱动对象

为了避免在每次测试时都重复创建浏览器驱动对象,浪费资源和时间,我们可以考虑创建一个公共类来统一管理浏览器驱动对象的创建。

public class AutotestUtils {

    public static ChromeDriver chromeDriver;

    public static EdgeDriver edgeDriver;

    //创建驱动对象
    public static ChromeDriver createChromeDriver(){
        //驱动创建好了/没有创建
        if (chromeDriver==null){
            ChromeOptions options=new ChromeOptions();
            options.addArguments("--remote-allow-origins=*");
            chromeDriver=new ChromeDriver(options);
            //隐式等待
            Duration duration=Duration.ofSeconds(10);
            long millis= duration.toMillis();
            chromeDriver.manage().timeouts().implicitlyWait(millis, TimeUnit.MILLISECONDS);
        }
        return chromeDriver;
    }

    public static EdgeDriver createEdgeDriver(){
        //驱动创建好了/没有创建
        if (edgeDriver==null){
            EdgeOptions options=new EdgeOptions();
            options.addArguments("--remote-allow-origins=*");
            edgeDriver=new EdgeDriver(options);
            //隐式等待
            Duration duration=Duration.ofSeconds(10);
            long millis= duration.toMillis();
            edgeDriver.manage().timeouts().implicitlyWait(millis,TimeUnit.MILLISECONDS);
        }
        return edgeDriver;
    }
}

测试套件

使用suite测试套件来进行测试,指定类来运行用例

@Suite
@SelectClasses({RegisterPrepareTest.class, LoginPrepareTest.class, BoardPrepareTest.class, ArticlePrepareTest.class,UserPrepareTest.class,MailPrepareTest.class,driverQuitTest.class})
public class runSuite {
}

释放驱动类

单独写一个释放驱动类

public class driverQuitTest extends AutotestUtils {
    
    public static ChromeDriver chromeDriver;
    
    public static EdgeDriver edgeDriver;
    
    @Test
    static void driverQuit(){
        if (chromeDriver!=null){
            chromeDriver.quit();
        } else if (edgeDriver!=null) {
            edgeDriver.quit();
        }else {
            chromeDriver.quit();
            edgeDriver.quit();
        }
    }
}

4.2、功能测试

注册页面

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */
    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-up.html");
    }

测试空的用户名能否正常注册

    /**
     * 测试空的用户名
     * @param username
     * @param nickname
     * @param password
     * @param passwordRepeat
     * @throws InterruptedException
     */
    @Order(1)
    @ParameterizedTest
    @CsvSource({",baekhyun,1992,1992"})
    public void testRegisterNullUsername(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#nickname")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
        if (nickname!=null){
            chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
        }
        if (password!=null){
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        }
        if (passwordRepeat!=null){
            chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
        }
        chromeDriver.findElement(By.cssSelector("#policy")).click();
        chromeDriver.findElement(By.cssSelector("#submit")).click();

        Thread.sleep(1000);
        String except="用户名不能为空";
        String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[1]/div")).getText();
        Assertions.assertEquals(except,actual);

        Thread.sleep(1000);
        //复原勾选框
        chromeDriver.findElement(By.cssSelector("#policy")).click();
    }

测试空的昵称能否正常注册

    /**
     * 测试空的昵称
     * @param username
     * @param nickname
     * @param password
     * @param passwordRepeat
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource({"baekhyun,,1992,1992"})
    public void testRegisterNullNickname(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#nickname")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
        if (username!=null){
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        }
        if (password!=null){
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        }
        if (passwordRepeat!=null){
            chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
        }
        chromeDriver.findElement(By.cssSelector("#policy")).click();
        chromeDriver.findElement(By.cssSelector("#submit")).click();

        Thread.sleep(1000);
        String except="昵称不能为空";
        String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[2]/div")).getText();
        Assertions.assertEquals(except,actual);

        Thread.sleep(1000);
        //复原勾选框
        chromeDriver.findElement(By.cssSelector("#policy")).click();
    }

测试空的密码能否正常注册

    /**
     * 测试空的密码
     * @param username
     * @param nickname
     * @param password
     * @param passwordRepeat
     * @throws InterruptedException
     */
    @Order(3)
    @ParameterizedTest
    @CsvSource({"baekhyun,baekhyun,,1992"})
    public void testRegisterNullPassword(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#nickname")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
        if (username!=null){
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        }
        if (nickname!=null){
            chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
        }
        if (passwordRepeat!=null){
            chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
        }
        chromeDriver.findElement(By.cssSelector("#policy")).click();
        chromeDriver.findElement(By.cssSelector("#submit")).click();

        Thread.sleep(1000);
        String except="密码不能为空";
        String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[3]/div/div")).getText();
        Assertions.assertEquals(except,actual);

        Thread.sleep(1000);
        //复原勾选框
        chromeDriver.findElement(By.cssSelector("#policy")).click();
    }

测试空的确认密码能否正常注册

    /**
     * 测试空的确认密码
     * @param username
     * @param nickname
     * @param password
     * @param passwordRepeat
     * @throws InterruptedException
     */
    @Order(4)
    @ParameterizedTest
    @CsvSource({"baekhyun,baekhyun,1992,"})
    public void testRegisterNullPasswordRepeat(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#nickname")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
        if (username!=null){
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        }
        if (nickname!=null){
            chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
        }
        if (password!=null){
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        }
        chromeDriver.findElement(By.cssSelector("#policy")).click();
        chromeDriver.findElement(By.cssSelector("#submit")).click();

        Thread.sleep(1000);
        String except="请检查确认密码";
        String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[4]/div/div")).getText();
        Assertions.assertEquals(except,actual);

        Thread.sleep(1000);
        //复原勾选框
        chromeDriver.findElement(By.cssSelector("#policy")).click();
    }

测试密码和确认密码不一致时能否正常注册

    /**
     * 测试密码和确认密码不一致
     * @param username
     * @param nickname
     * @param password
     * @param passwordRepeat
     * @throws InterruptedException
     */
    @Order(5)
    @ParameterizedTest
    @CsvSource({"baekhyun,baekhyun,1992,1993"})
    public void testRegisterNullSame(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#nickname")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
        if (username!=null){
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        }
        if (nickname!=null){
            chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
        }
        if (password!=null){
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        }
        if (passwordRepeat!=null){
            chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
        }
        chromeDriver.findElement(By.cssSelector("#policy")).click();
        chromeDriver.findElement(By.cssSelector("#submit")).click();

        Thread.sleep(1000);
        String except="请检查确认密码";
        String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/div[4]/div/div")).getText();
        Assertions.assertEquals(except,actual);

        Thread.sleep(1000);
        //复原勾选框
        chromeDriver.findElement(By.cssSelector("#policy")).click();
    }

测试用户名已注册时能否正常注册

    /**
     * 测试用户名已存在
     * @param username
     * @param nickname
     * @param password
     * @param passwordRepeat
     * @throws InterruptedException
     */
    @Order(6)
    @ParameterizedTest
    @CsvSource({"baekhyun,baekhyun,1992,1992"})
    public void testRegisterNullExistUsername(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#nickname")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
        if (username!=null){
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        }
        if (nickname!=null){
            chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
        }
        if (password!=null){
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        }
        if (passwordRepeat!=null){
            chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
        }
        chromeDriver.findElement(By.cssSelector("#policy")).click();
        chromeDriver.findElement(By.cssSelector("#submit")).click();

        Thread.sleep(1000);
        String exp_url="http://49.232.185.203:58080/sign-up.html";
        String cur_url=chromeDriver.getCurrentUrl();
        Assertions.assertEquals(exp_url,cur_url);

        Thread.sleep(1000);
        //复原勾选框
        chromeDriver.findElement(By.cssSelector("#policy")).click();
        Thread.sleep(1000);
    }

测试没有点击同意协议能否正常注册

    /**
     * 测试没有点击同意协议
     * @param username
     * @param nickname
     * @param password
     * @param passwordRepeat
     * @throws InterruptedException
     */
    @Order(7)
    @ParameterizedTest
    @CsvSource({"do,do,1993,1993"})
    public void testRegisterNullPolicy(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#nickname")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
        if (username!=null){
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        }
        if (nickname!=null){
            chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
        }
        if (password!=null){
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        }
        if (passwordRepeat!=null){
            chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
        }
        chromeDriver.findElement(By.cssSelector("#submit")).click();

        Thread.sleep(1000);
        String exp_url="http://49.232.185.203:58080/sign-up.html";
        String cur_url=chromeDriver.getCurrentUrl();
        Assertions.assertEquals(exp_url,cur_url);

        Thread.sleep(1000);
    }

测试输入正确的用户名、昵称、密码、确认密码能否正常注册

    /**
     * 正确的用户名、昵称、密码、确认密码
     * @param username
     * @param nickname
     * @param password
     * @param passwordRepeat
     * @throws InterruptedException
     */
    @Order(8)
    @ParameterizedTest
    @CsvSource({"sehun,sehun,1994,1994"})
    public void testRegisterSuccess(String username,String nickname,String password,String passwordRepeat) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#nickname")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#passwordRepeat")).clear();
        if (username!=null){
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        }
        if (nickname!=null){
            chromeDriver.findElement(By.cssSelector("#nickname")).sendKeys(nickname);
        }
        if (password!=null){
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        }
        if (passwordRepeat!=null){
            chromeDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys(passwordRepeat);
        }
        chromeDriver.findElement(By.cssSelector("#policy")).click();
        chromeDriver.findElement(By.cssSelector("#submit")).click();

        Thread.sleep(3000);
        String exp_url="http://49.232.185.203:58080/sign-in.html";
        String cur_url=chromeDriver.getCurrentUrl();
        Assertions.assertEquals(exp_url,cur_url);
    }

测试结果:

登录页面

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */
    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-in.html");
    }

测试输入错误的用户名和密码

    /**
     * 测试错误的用户名或密码
     * @param username
     * @param password
     * @throws InterruptedException
     */
    @Order(1)
    @ParameterizedTest
    @CsvSource({"baekhyun,1999","dd,1993"})
    void testLoginErrorUser(String username,String password) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        chromeDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        String exp_url="http://49.232.185.203:58080/sign-in.html";
        String cur_url=chromeDriver.getCurrentUrl();
        Assertions.assertEquals(exp_url,cur_url);
        Thread.sleep(1000);
    }

测试只输入用户名

    /**
     * 测试空的用户名
     * @param username
     * @param password
     * @throws InterruptedException
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource({",1992",",1993"})
    void testLoginNullUsername(String username,String password) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        if (password!=null){
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        }
        chromeDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        String except="用户名不能为空";
        String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signInForm\"]/div[1]/div")).getText();
        Assertions.assertEquals(except,actual);
        Thread.sleep(1000);
    }

测试只输入密码

    /**
     * 测试空的密码
     * @param username
     * @param password
     * @throws InterruptedException
     */
    @Order(3)
    @ParameterizedTest
    @CsvSource({"baekhyun,","do,"})
    void testLoginNullPassword(String username,String password) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        if (username!=null){
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        }
        chromeDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        String except="密码不能为空";
        String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signInForm\"]/div[2]/div/div")).getText();
        Assertions.assertEquals(except,actual);
        Thread.sleep(1000);
    }

测试输入正确的用户名和密码

    /**
     * 测试正确的用户名和密码
     * @param username
     * @param password
     * @throws InterruptedException
     */
    @Order(4)
    @ParameterizedTest
    @CsvSource({"baekhyun,1992","do,1993"})
    void testLoginSuccess(String username,String password) throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        chromeDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        String exp_url="http://49.232.185.203:58080/index.html";
        String cur_url=chromeDriver.getCurrentUrl();
        Assertions.assertEquals(exp_url,cur_url);
        chromeDriver.navigate().back();
        Thread.sleep(1000);
    }

测试结果:

版块

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */

    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-in.html");
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("baekhyun");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
    }

测试是否显示所有帖子信息

    /**
     * 测试是否显示板块下所有帖子的信息
     */
    @Order(1)
    @Test
    void testDisplayALLArticle() throws InterruptedException {
        Thread.sleep(1000);
        String exp1=chromeDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).getText();
        Assertions.assertEquals("招聘开发岗位",exp1);
        String exp2=chromeDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(2) > div > div.col > div.text-truncate > a > strong")).getText();
        Assertions.assertEquals("测试测试333",exp2);
        String exp3=chromeDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(3) > div > div.col > div.text-truncate > a > strong")).getText();
        Assertions.assertEquals("测试测试222",exp3);
        String exp4=chromeDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(4) > div > div.col > div.text-truncate > a > strong")).getText();
        Assertions.assertEquals("测试测试111",exp4);
    }

测试右上角用户信息

    /**
     * 测试右上角用户信息
     */
    @Order(2)
    @Test
    void testUserInfo() throws InterruptedException {
        Thread.sleep(1000);
        WebElement userinfo=chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown"));
        Assertions.assertNotNull(userinfo);
    }

测试站内信按钮

    /**
     * 测试站内信按钮
     */
    @Order(3)
    @Test
    void testDisplayMail() throws InterruptedException {
        Thread.sleep(1000);
        WebElement mail=chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div"));
        Assertions.assertNotNull(mail);
    }

测试点击用户头像是否出现下拉框信息

    /**
     * 测试点击用户头像是否出现下拉框
     */
    @Order(4)
    @Test
    void testDisplayDownList() throws InterruptedException {
        Thread.sleep(1000);
        //首先得点击下拉框
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();

        String exp1=chromeDriver.findElement(By.xpath("//*[@id=\"index_user_profile\"]")).getText();
        Assertions.assertEquals("我的帖子",exp1);
        String exp2=chromeDriver.findElement(By.xpath("//*[@id=\"index_user_settings\"]")).getText();
        Assertions.assertEquals("个人中心",exp2);
        String quit=chromeDriver.findElement(By.xpath("//*[@id=\"index_user_logout\"]")).getText();
        Assertions.assertEquals("退出",quit);

        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();
    }

测试能否跳转到详情页

    /**
     * 测试能否跳转到详情页
     */
    @Order(5)
    @Test
    void testArticleDetail() throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
        String except="招聘开发岗位测试";
        String actual=chromeDriver.findElement(By.xpath("//*[@id=\"details_article_content\"]/p")).getText();
        Thread.sleep(1000);
        Assertions.assertEquals(except,actual);
        chromeDriver.findElement(By.cssSelector("#nav_board_index > a")).click();
    }

测试能否正确跳转到帖子编辑页

    /**
     * 测试发布帖子能否正确跳到帖子编辑页
     */
    @Order(6)
    @Test
    void Publish1() throws InterruptedException {
        Thread.sleep(2000);
        chromeDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
        Thread.sleep(3000);
        String text=chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]")).getText();
        Assertions.assertEquals("发新贴",text);
        chromeDriver.findElement(By.cssSelector("#nav_board_index > a")).click();
    }

测试点击版块能否跳转到版块下的所有帖子

    /**
     * 测试点击版块能否跳到板块下所有的帖子
     */
    @Order(7)
    @Test
    void testBoardInfo() throws InterruptedException {
        Thread.sleep(1000);
        chromeDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]")).click();
        Thread.sleep(2000);
        String text=chromeDriver.findElement(By.xpath("//*[@id=\"article_list_board_title\"]")).getText();
        Assertions.assertEquals("Java",text);
        String exp1=chromeDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).getText();
        Assertions.assertEquals("测试测试222",exp1);
        String exp2=chromeDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(2) > div > div.col > div.text-truncate > a > strong")).getText();
        Assertions.assertEquals("测试测试111",exp2);
    }

测试退出按钮能否跳转到登录页面

    /**
     * 测试退出按钮
     */
    @Order(8)
    @Test
    void testQuit() throws InterruptedException {
        //首先得点击下拉框
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();
        chromeDriver.findElement(By.xpath("//*[@id=\"index_user_logout\"]")).click();
        Thread.sleep(1000);
        String exp_url="http://49.232.185.203:58080/sign-in.html";
        String actual_url=chromeDriver.getCurrentUrl();
        Assertions.assertEquals(exp_url,actual_url);
    }

测试结果:

 帖子

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */

    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-in.html");
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("baekhyun");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
    }

测试正确发布帖子

    /**
     * 测试发布新帖
     * @throws InterruptedException
     */
    @Order(1)
    @Test
    void Publish1() throws InterruptedException {
        chromeDriver.findElement(By.xpath("//*[@id=\"nav_board_index\"]/a/span[2]")).click();
        chromeDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
        chromeDriver.findElement(By.cssSelector("#article_post_title")).sendKeys("自动化测试标题");
        chromeDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);
        chromeDriver.findElement(By.cssSelector("#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre")).sendKeys("自动化测试内容");
        chromeDriver.manage().timeouts().implicitlyWait(3, TimeUnit.MINUTES);
        chromeDriver.findElement(By.cssSelector("#article_post_submit")).click();
        Thread.sleep(1000);
        String text = chromeDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).getText();
        Assertions.assertEquals("自动化测试标题",text);
    }

测试能否正确跳转到帖子详情页

    /**
     * 测试能否跳转到详情页
     */
    @Order(1)
    @Test
    void testArticleDetail() throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
        String except="招聘开发岗位测试";
        String actual=chromeDriver.findElement(By.xpath("//*[@id=\"details_article_content\"]/p")).getText();
        Thread.sleep(1000);
        Assertions.assertEquals(except,actual);
    }

测试能否显示帖子的所有信息和用户信息

    /**
     * 测试是否显示帖子的所有信息和用户信息
     */
    @Order(2)
    @Test
    void testDisplayArticle_userInfo() throws InterruptedException {
        //帖子作者
        String article_username="do";
        String username=chromeDriver.findElement(By.xpath("//*[@id=\"article_details_author_name\"]")).getText();
        //帖子标题
        String article_title="招聘开发岗位";
        String title=chromeDriver.findElement(By.xpath("//*[@id=\"details_article_title\"]")).getText();
        //帖子内容
        String article_content="招聘开发岗位测试";
        String content=chromeDriver.findElement(By.xpath("//*[@id=\"details_article_content\"]/p")).getText();
        Thread.sleep(1000);
        Assertions.assertEquals(article_username,username);
        Assertions.assertEquals(article_title,title);
        Assertions.assertEquals(article_content,content);
    }

测试能否显示帖子的创建时间、点赞数、浏览量、回复数

    /**
     * 测试是否显示帖子的创建时间、点赞数、浏览量、回复数
     */
    @Order(3)
    @Test
    void testDisplayarticleInfo(){
        //帖子创建时间
        String ex_createTime="2024-05-28 12:08:57";
        String createTime=chromeDriver.findElement(By.xpath("//*[@id=\"details_article_createTime\"]")).getText();
        Assertions.assertEquals(ex_createTime,createTime);
        //点赞数
        WebElement like_count_nav=chromeDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(3) > svg"));
        Assertions.assertNotNull(like_count_nav);
        //浏览量
        WebElement browse_nav=chromeDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(2) > svg"));
        Assertions.assertNotNull(browse_nav);
        //回复数
        WebElement reply_nav=chromeDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div.col-auto.d-none.d-md-inline > ul > li:nth-child(4) > svg"));
        Assertions.assertNotNull(reply_nav);
    }

测试用户不是作者,是否会显示点赞选项

    /**
     * 测试如果不是作者,是否出现点赞按钮
     */
    @Order(4)
    @Test
    void testuserNotArticleUser(){
        //不是作者的情况下
        //点赞按钮
        WebElement like_nav=chromeDriver.findElement(By.cssSelector("#details_btn_like_count > svg"));
        Assertions.assertNotNull(like_nav);
    }

测试用户是作者,是否显示点赞、编辑、删除选项

    /**
     * 测试如果是作者,是否显示点赞、编辑、删除按钮
     */
    @Order(5)
    @Test
    void testuserIsArticleUser(){
        //是作者的情况下,需先退出当前帖子详情
        chromeDriver.findElement(By.cssSelector("#nav_board_index > a")).click();
        //进入作者为别人的帖子详情页
        chromeDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(2) > div > div.col > div.text-truncate > a > strong")).click();
        //点赞按钮
        WebElement like_nav=chromeDriver.findElement(By.cssSelector("#details_btn_like_count > svg"));
        Assertions.assertNotNull(like_nav);
        //编辑按钮
        WebElement edit_nav=chromeDriver.findElement(By.cssSelector("#details_artile_edit > svg"));
        Assertions.assertNotNull(edit_nav);
        //删除按钮
        WebElement del_nav=chromeDriver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a"));
        Assertions.assertNotNull(del_nav);
    }

测试结果:

用户个人中心页

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */

    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-in.html");
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("do");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1993");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
    }

测试能否正确显示当前用户下的所有帖子

    /**
     * 测试能否正确显示当前用户下的所有帖子
     */
    @Order(1)
    @Test
    void testDisplayUserAllArticle() throws InterruptedException {
        Thread.sleep(1000);
        //首先得点击下拉框
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();

        chromeDriver.findElement(By.xpath("//*[@id=\"index_user_profile\"]")).click();
        String article_title=chromeDriver.findElement(By.xpath("//*[@id=\"profile_article_body\"]/li/div[2]/div/div/div/div/div[1]/a/strong")).getText();
        Assertions.assertEquals("招聘开发岗位",article_title);
    }

测试能否正确显示发帖数、邮箱、注册日期、个人介绍

    /**
     * 测试能否正确显示发帖数、邮箱、注册日期、个人介绍
     */
    @Order(2)
    @Test
    void testUserInfo(){
        WebElement articlecount_nav=chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div/div[1]"));
        Assertions.assertNotNull(articlecount_nav);
        WebElement email_nav=chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div/div[2]"));
        Assertions.assertNotNull(email_nav);
        WebElement createtime_nav=chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div/div[3]"));
        Assertions.assertNotNull(createtime_nav);
        WebElement introduce_nav=chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div[2]/div/div"));
        Assertions.assertNotNull(introduce_nav);
    }

测试能否正确显示他人的帖子信息和用户信息

    /**
     * 测试能否正确显示他人的帖子信息或用户信息
     */
    @Order(3)
    @Test
    void testOtherUserInfo(){
        //点击首页
        chromeDriver.findElement(By.cssSelector("#nav_board_index > a")).click();
        //点击别人文章
        chromeDriver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[2]/div/div[2]/div[1]/a/strong")).click();
        //点击别人的名称进入详情页
        chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div[1]/div[1]/div/h3")).click();
        WebElement articlecount_nav=chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div/div[1]"));
        Assertions.assertNotNull(articlecount_nav);
        WebElement email_nav=chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div/div[2]"));
        Assertions.assertNotNull(email_nav);
        WebElement createtime_nav=chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div/div[3]"));
        Assertions.assertNotNull(createtime_nav);
        WebElement introduce_nav=chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div[2]/div/div"));
        Assertions.assertNotNull(introduce_nav);
    }

测试修改昵称、电子邮箱、电话号码

    /**
     * 测试修改昵称、邮箱地址、电话号码
     */
    @Order(4)
    @Test
    void testModifyUserInfo() throws InterruptedException {
        Thread.sleep(1000);
        //首先得点击下拉框
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();
        //点击用户中心
        chromeDriver.findElement(By.xpath("//*[@id=\"index_user_settings\"]")).click();
        Thread.sleep(1000);
        //修改昵称
        chromeDriver.findElement(By.xpath("//*[@id=\"setting_input_nickname\"]")).clear();
        chromeDriver.findElement(By.xpath("//*[@id=\"setting_input_nickname\"]")).sendKeys("dodo");
        chromeDriver.findElement(By.xpath("//*[@id=\"setting_submit_nickname\"]")).click();
        Thread.sleep(1000);
        //修改邮箱地址
        chromeDriver.findElement(By.xpath("//*[@id=\"setting_input_email\"]")).clear();
        chromeDriver.findElement(By.xpath("//*[@id=\"setting_input_email\"]")).sendKeys("19933@qq.com");
        chromeDriver.findElement(By.xpath("//*[@id=\"setting_submit_email\"]")).click();
        Thread.sleep(1000);
        //修改电话号码
        chromeDriver.findElement(By.xpath("//*[@id=\"setting_input_phoneNum\"]")).clear();
        chromeDriver.findElement(By.xpath("//*[@id=\"setting_input_phoneNum\"]")).sendKeys("12727178333");
        Thread.sleep(1000);
        chromeDriver.findElement(By.xpath("//*[@id=\"setting_submit_phoneNum\"]")).click();
        Thread.sleep(2000);

        //退出
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();
        chromeDriver.findElement(By.xpath("//*[@id=\"index_user_logout\"]")).click();
        Thread.sleep(1000);
        //登录
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("do");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(3000);


        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();
        chromeDriver.findElement(By.xpath("//*[@id=\"index_user_settings\"]")).click();
        Thread.sleep(1000);
        String nickname=chromeDriver.findElement(By.xpath("//*[@id=\"settings_nickname\"]")).getText();
        Assertions.assertEquals("dodo",nickname);
    }

测试修改密码

    /**
     * 测试修改密码
     */
    @Order(5)
    @Test
    void testModifyPassword() throws InterruptedException {
        Thread.sleep(1000);
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();
        //点击用户中心
        chromeDriver.findElement(By.xpath("//*[@id=\"index_user_settings\"]")).click();
        Thread.sleep(1000);
        //填写旧密码
        chromeDriver.findElement(By.xpath("//*[@id=\"settings_input_oldPassword\"]")).sendKeys("1992");
        //新密码
        chromeDriver.findElement(By.xpath("//*[@id=\"settings_input_newPassword\"]")).sendKeys("1993");
        //确认密码
        chromeDriver.findElement(By.xpath("//*[@id=\"settings_input_passwordRepeat\"]")).sendKeys("1993");
        Thread.sleep(2000);
        chromeDriver.findElement(By.xpath("//*[@id=\"settings_submit_password\"]")).click();
        Thread.sleep(1000);

        String exp_url="http://49.232.185.203:58080/sign-in.html";
        String actual_url=chromeDriver.getCurrentUrl();
        Assertions.assertEquals(exp_url,actual_url);
        Thread.sleep(1000);

        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("do");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1993");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(3000);

        String exp_url2="http://49.232.185.203:58080/index.html";
        String actual_url2=chromeDriver.getCurrentUrl();
        Assertions.assertEquals(exp_url2,actual_url2);
    }

测试结果:

站内信

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */

    public static ChromeDriver chromeDriver=createChromeDriver();

    public static EdgeDriver edgeDriver=createEdgeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-in.html");
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("do");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1993");
        chromeDriver.findElement(By.cssSelector("#submit")).click();

        edgeDriver.get("http://49.232.185.203:58080/sign-in.html");
        edgeDriver.findElement(By.cssSelector("#username")).clear();
        edgeDriver.findElement(By.cssSelector("#password")).clear();
        edgeDriver.findElement(By.cssSelector("#username")).sendKeys("baekhyun");
        edgeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        edgeDriver.findElement(By.cssSelector("#submit")).click();
    }

测试能否成功发送站内信

    /**
     * 测试能否成功发送站内信
     */
    @Order(1)
    @Test()
    @Transactional
    void testSendMailSuccess() throws InterruptedException {
        edgeDriver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a/strong")).click();
        edgeDriver.findElement(By.xpath("//*[@id=\"btn_details_send_message\"]")).click();
        edgeDriver.findElement(By.xpath("//*[@id=\"index_message_receive_content\"]")).sendKeys("我是baekhyun");
        edgeDriver.findElement(By.xpath("//*[@id=\"btn_index_send_message\"]")).click();
        Thread.sleep(1000);
        String exp_url="http://49.232.185.203:58080/index.html";
        String actual_url=chromeDriver.getCurrentUrl();
        Assertions.assertEquals(exp_url,actual_url);
        Thread.sleep(1000);
    }

测试能否正确显示站内信

    /**
     * 测试能否正确显示站内信
     */
    @Order(2)
    @Test
    void testDisplayMail() throws InterruptedException {
        chromeDriver.navigate().refresh();
        Thread.sleep(1000);
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div")).click();
        String receive=chromeDriver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/div")).getText();
        Assertions.assertEquals("我是baekhyun",receive);
    }

测试站内信未读时,前方是否有[未读]标志

    /**
     * 测试站内信未读时,前方是否有[未读]标志
     */
    @Order(3)
    @Test
    void testUnread() throws InterruptedException {
        chromeDriver.navigate().refresh();
        Thread.sleep(1000);
        //点击站内信
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div")).click();
        String expect=chromeDriver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/a/span[1]")).getText();
        Assertions.assertEquals("[未读]",expect);
    }

测试站内信已读时,前方是否有[已读]标志

    /**
     * 测试站内信已读时,前方是否有[已读]标志
     */
    @Order(4)
    @Test
    void testread() throws InterruptedException {
        chromeDriver.navigate().refresh();
        Thread.sleep(1000);
        //点击站内信
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div")).click();
        //点击要读取的站内信
        chromeDriver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/a")).click();
        //点击退出
        chromeDriver.findElement(By.xpath("//*[@id=\"index_message_reply_modal\"]/div/div/div[1]/button")).click();
        Thread.sleep(1000);
        chromeDriver.navigate().refresh();
        //点击站内信
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div")).click();
        String expect=chromeDriver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/a/span[1]")).getText();
        Assertions.assertEquals("[已读]",expect);
    }

测试站内信已回复时,前方是否有[已回复]标志

    /**
     * 测试站内信已回复时,前方是否有[已回复]标志
     */
    @Order(5)
    @Test
    void testReplied() throws InterruptedException {
        Thread.sleep(1000);
        chromeDriver.navigate().refresh();
        //点击站内信
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div")).click();
        //点击要回复的站内信
        chromeDriver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/a")).click();
        //点击回复
        chromeDriver.findElement(By.xpath("//*[@id=\"btn_index_message_reply\"]")).click();
        Thread.sleep(1000);
        //输入要回复的内容
        chromeDriver.findElement(By.xpath("//*[@id=\"index_message_reply_receive_content\"]")).sendKeys("我是do");
        //点击发送
        chromeDriver.findElement(By.xpath("//*[@id=\"btn_index_send_message_reply\"]")).click();
        Thread.sleep(2000);
        chromeDriver.navigate().refresh();
        //点击站内信
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div")).click();
        String expect=chromeDriver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/a/span[1]")).getText();
        Assertions.assertEquals("[已回复]",expect);
    }

测试回复站内信能否成功

    /**
     * 测试回复站内信能否成功
     */
    @Order(6)
    @Test
    void replySuccess() throws InterruptedException {
        Thread.sleep(1000);
        edgeDriver.navigate().refresh();
        //点击站内信
        edgeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div")).click();
        //点击要回复的站内信
        String text=edgeDriver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div[1]/div/div[2]/div")).getText();
        Assertions.assertEquals("我是do",text);
    }

测试结果:

4.3、界面测试

注册页面

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */
    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-up.html");
    }

测试用户注册标题是否存在

    /**
     * 测试用户注册标题是否存在
     */
    @Order(1)
    @Test
    void testRegisterTitle(){
        String expect_title="用户注册";
        String actual=chromeDriver.findElement(By.xpath("//*[@id=\"signUpForm\"]/div/h2")).getText();
        Assertions.assertEquals(expect_title,actual);
    }

测试用户名输入框是否存在

    /**
     * 测试用户名输入框是否存在
     */
    @Order(2)
    @Test
    void testUsernameInput(){
        WebElement userInput=chromeDriver.findElement(By.xpath("//*[@id=\"username\"]"));
        Assertions.assertNotNull(userInput);
    }

测试昵称输入框是否存在

    /**
     * 测试昵称输入框是否存在
     */
    @Order(3)
    @Test
    void testNicknameInput(){
        WebElement nicknameInput=chromeDriver.findElement(By.xpath("//*[@id=\"nickname\"]"));
        Assertions.assertNotNull(nicknameInput);
    }

测试密码输入框是否存在

    /**
     * 测试密码输入框是否存在
     */
    @Order(4)
    @Test
    void testPasswordInput(){
        WebElement passwordInput=chromeDriver.findElement(By.xpath("//*[@id=\"password\"]"));
        Assertions.assertNotNull(passwordInput);
    }

测试确认密码输入框是否存在

    /**
     * 测试密码确认输入框是否存在
     */
    @Order(5)
    @Test
    void testPasswordRepeat(){
        WebElement passwordRepeatInput=chromeDriver.findElement(By.xpath("//*[@id=\"passwordRepeat\"]"));
        Assertions.assertNotNull(passwordRepeatInput);
    }

测试注册按钮是否存在

    /**
     * 测试注册按钮是否存在
     */
    @Order(6)
    @Test
    void testRegisterButton(){
        WebElement registerButton=chromeDriver.findElement(By.xpath("//*[@id=\"submit\"]"));
        Assertions.assertNotNull(registerButton);
    }

测试登录跳转按钮是否存在

    /**
     * 测试登录跳转按钮是否存在
     */
    @Order(7)
    @Test
    void testLoginJumpButton(){
        WebElement loginJumpButton=chromeDriver.findElement(By.xpath("/html/body/div/div/div[2]/a"));
        Assertions.assertNotNull(loginJumpButton);
    }

测试结果:

登录页面

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */
    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-in.html");
    }

测试用户登录标题是否存在

    /**
     * 测试用户登录标题是否存在
     */
    @Order(1)
    @Test
    void testLoginTitle(){
        String login_title="用户登录";
        String except=chromeDriver.findElement(By.xpath("/html/body/div/div/div/div[1]/div/div[2]/div/h2")).getText();
        Assertions.assertEquals(login_title,except);
    }

测试用户名输入框是否存在

    /**
     * 测试用户名输入框是否存在
     */
    @Order(2)
    @Test
    void usernameInput(){
        WebElement usernameInput=chromeDriver.findElement(By.xpath("//*[@id=\"username\"]"));
        Assertions.assertNotNull(usernameInput);
    }

测试密码输入框是否存在

    /**
     * 测试密码输入框是否存在
     */
    @Order(3)
    @Test
    void passwordInput(){
        WebElement passwordInput=chromeDriver.findElement(By.xpath("//*[@id=\"password\"]"));
        Assertions.assertNotNull(passwordInput);
    }

测试登录按钮是否存在

    /**
     * 测试登录按钮是否存在
     */
    @Order(4)
    @Test
    void testLoginButton(){
        WebElement loginButton=chromeDriver.findElement(By.xpath("//*[@id=\"submit\"]"));
        Assertions.assertNotNull(loginButton);
    }

测试注册跳转按钮是否存在

    /**
     * 测试注册跳转按钮是否存在
     */
    @Order(5)
    @Test
    void testLoginJumpButton(){
        WebElement loginJumpButton=chromeDriver.findElement(By.xpath("/html/body/div/div/div/div[1]/div/div[3]/a"));
        Assertions.assertNotNull(loginJumpButton);
    }

测试结果:

版块

首先定义浏览器对象和url

/**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */
    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-in.html");
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("baekhyun");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
    }

测试导航栏中版块是否存在

/**
     * 测试导航栏中版块是否存在
     */
    @Order(1)
    @Test
    void testExistBoard(){
        //首页
        WebElement board1=chromeDriver.findElement(By.xpath("//*[@id=\"nav_board_index\"]/a"));
        Assertions.assertNotNull(board1);
        //java
        WebElement board2=chromeDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a"));
        Assertions.assertNotNull(board2);
        //c++
        WebElement board3=chromeDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a"));
        Assertions.assertNotNull(board3);
        //前端技术
        WebElement board4=chromeDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a"));
        Assertions.assertNotNull(board4);
        //Mysql
        WebElement board5=chromeDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a"));
        Assertions.assertNotNull(board5);
        //面试宝典
        WebElement board6=chromeDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a"));
        Assertions.assertNotNull(board6);
        //经验分享
        WebElement board7=chromeDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a"));
        Assertions.assertNotNull(board7);
        //招聘信息
        WebElement board8=chromeDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a"));
        Assertions.assertNotNull(board8);
        //福利待遇
        WebElement board9=chromeDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a"));
        Assertions.assertNotNull(board9);
        //灌水区
        WebElement board10=chromeDriver.findElement(By.xpath("//*[@id=\"topBoardList\"]/li[2]/a"));
        Assertions.assertNotNull(board10);
    }

测试夜间模式按钮是否存在

/**
     * 测试夜间模式按钮是否存在
     */
    @Order(2)
    @Test
    void testExistButton(){
        WebElement button=chromeDriver.findElement(By.xpath("/html/body/div[1]/header[1]/div/div/div[2]/a[1]"));
        Assertions.assertNotNull(button);
    }

测试结果:

帖子

首先定义浏览器对象和url

/**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */
    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-in.html");
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("baekhyun");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
    }

测试发布帖子按钮是否存在

/**
     * 测试发布帖子按钮是否存在
     */
    @Order(1)
    @Test
    void testPublish(){
        WebElement publish= chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[1]/div/div/div[2]/div"));
        Assertions.assertNotNull(publish);
    }

测试发私信按钮是否存在

/**
     * 测试发私信按钮是否存在
     */
    @Order(2)
    @Test
    void testSendMessage(){
        chromeDriver.findElement(By.xpath("//*[@id=\"artical-items-body\"]/div[1]/div/div[2]/div[1]/a/strong")).click();
        WebElement button=chromeDriver.findElement(By.xpath("//*[@id=\"btn_details_send_message\"]"));
        Assertions.assertNotNull(button);
    }

测试我的帖子按钮是否存在

/**
     * 测试我的帖子按钮是否存在
     */
    @Order(3)
    @Test
    void testMyArticle(){
        //首先得点击下拉框
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();

        WebElement button=chromeDriver.findElement(By.xpath("//*[@id=\"index_user_profile\"]"));
        Assertions.assertNotNull(button);
    }

测试结果:

用户个人中心页

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */
    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-in.html");
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("baekhyun");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
    }

测试昵称输入框是否存在

    /**
     * 测试昵称输入框是否存在
     */
    @Order(1)
    @Test
    void testNicknameInput(){
        //首先得点击下拉框
        chromeDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown")).click();
        chromeDriver.findElement(By.xpath("//*[@id=\"index_user_settings\"]")).click();
        WebElement nicknameInput=chromeDriver.findElement(By.xpath("//*[@id=\"setting_input_nickname\"]"));
        Assertions.assertNotNull(nicknameInput);
    }

测试邮箱地址是否存在

    /**
     * 测试邮箱地址输入框是否存在
     */
    @Order(2)
    @Test
    void testEmailInput(){
        WebElement emailInput=chromeDriver.findElement(By.xpath("//*[@id=\"setting_input_email\"]"));
        Assertions.assertNotNull(emailInput);
    }

测试电话号码是否存在

    /**
     * 测试电话号码输入框是否存在
     */
    @Order(3)
    @Test
    void testPhoneNumInput(){
        WebElement phoneNumInput=chromeDriver.findElement(By.xpath("//*[@id=\"setting_input_phoneNum\"]"));
        Assertions.assertNotNull(phoneNumInput);
    }

测试原密码是否存在

    /**
     * 测试原密码输入框是否存在
     */
    @Order(4)
    @Test
    void testOldPasswordInput(){
        WebElement oldPasswordInput=chromeDriver.findElement(By.xpath("//*[@id=\"settings_input_oldPassword\"]"));
        Assertions.assertNotNull(oldPasswordInput);
    }

测试新密码是否存在

    /**
     * 测试新密码输入框是否存在
     */
    @Order(5)
    @Test
    void testNewPasswordInput(){
        WebElement newPasswordInput=chromeDriver.findElement(By.xpath("//*[@id=\"settings_input_newPassword\"]"));
        Assertions.assertNotNull(newPasswordInput);
    }

测试确认密码是否存在

    /**
     * 测试确认密码输入框是否存在
     */
    @Order(6)
    @Test
    void testPasswordRepeatInput(){
        WebElement passwordRepeatInput=chromeDriver.findElement(By.xpath("//*[@id=\"settings_input_passwordRepeat\"]"));
        Assertions.assertNotNull(passwordRepeatInput);
    }

测试提交修改按钮是否存在

    /**
     * 测试提交修改按钮是否存在
     */
    @Order(7)
    @Test
    void testSubmitInput(){
        WebElement submitInput=chromeDriver.findElement(By.xpath("//*[@id=\"settings_submit_password\"]"));
        Assertions.assertNotNull(submitInput);
    }

测试个人简介标题是否存在

    /**
     * 测试个人简介标题是否存在
     */
    @Order(8)
    @Test
    void testProfile(){
        String text=chromeDriver.findElement(By.xpath("//*[@id=\"bit-forum-content\"]/div[2]/div/div/div/div[2]/div/h3[5]")).getText();
        Assertions.assertEquals("个人简介",text);
    }

测试结果:

站内信

首先定义浏览器对象和url

/**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */
    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:58080/sign-in.html");
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("baekhyun");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
    }

测试站内信按钮是否存在

     /**
     * 测试站内信按钮是否存在
     */
    @Order(1)
    @Test
    void testMailButton(){
        WebElement mailButton=chromeDriver.findElement(By.xpath("/html/body/div[1]/header[1]/div/div/div[2]/div"));
        Assertions.assertNotNull(mailButton);
    }

测试站内信内回复按钮是否存在

    /**
     * 测试回复站内信按钮是否存在
     */
    @Order(2)
    @Test
    void testReplyButton() throws InterruptedException {
        chromeDriver.findElement(By.xpath("/html/body/div[1]/header[1]/div/div/div[2]/div")).click();
        chromeDriver.findElement(By.xpath("//*[@id=\"index_div_message_list\"]/div/div/div[2]/a")).click();
        Thread.sleep(1000);
        WebElement replyButton=chromeDriver.findElement(By.xpath("//*[@id=\"btn_index_message_reply\"]"));
        Assertions.assertNotNull(replyButton);
    }

测试站内信内取消按钮是否存在

    /**
     * 测试站内信取消按钮是否存在
     */
    @Order(3)
    @Test
    void testCancellationButton(){
        WebElement cancellationButton=chromeDriver.findElement(By.xpath("//*[@id=\"index_message_reply_cancel\"]"));
        Assertions.assertNotNull(cancellationButton);
    }

测试结果:

测试套件结果:

总结:目前针对论坛系统的测试如上述博客,由于部分用例无法进行自动化测试,所以进行相应的人工测试,且测试通过

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据整理操作及众所周知【数据分析】

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

进程与线程(二)

进程与线程&#xff08;二&#xff09; exec函数族守护进程守护进程的概念Linux守护进程的编写步骤创建子进程&#xff0c;父进程退出在子进程中创建新会话改变当前目录为根目录重设文件权限掩码关闭文件描述符守护进程案例编写 线程线程的概念Linux下进程和线程的区别 Linux下…

C++基础编程100题-002 OpenJudge-1.1-04 输出保留3位小数的浮点数

更多资源请关注纽扣编程微信公众号 002 OpenJudge-1.1-04 输出保留3位小数的浮点数 http://noi.openjudge.cn/ch0101/04/ 描述 读入一个单精度浮点数&#xff0c;保留3位小数输出这个浮点数。 输入 只有一行&#xff0c;一个单精度浮点数。 输出 也只有一行&#xff0c;…

java —— 集合

一、集合的概念 集合可以看做是一个存储对象的容器&#xff0c;与数组不同的是集合可以存储不同类型的对象&#xff0c;但开发中一般不这样做。集合不能存储基本类型的对象&#xff0c;如果存储则需要将其转化为对应的包装类。 二、集合的分类 集合分为 Collection 和 Map 两…

2024抖音流量认知课:掌握流量底层逻辑,明白应该选择什么赛道 (43节课)

课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/89360865 更多资源下载&#xff1a;关注我。 课程目录 01序言&#xff1a;拍前请看.mp4 02抖音建模逻辑1.mp4 03抖音标签逻辑2.mp4 04抖音推流逻辑3.mp4 05抖音起号逻辑4.mp4 06养号的意义.mp4 0…

算法解析——单身狗问题

欢迎来到博主的专栏&#xff1a;算法解析 博主ID代码小豪 文章目录 什么是单身狗问题leetcode_136——只出现一次的数字I使用位运算解决单身狗问题。 leetcode_137——只出现一次的数字II统计二进制数解决单身狗问题leetcode_260 只出现一次数字III分区域按位异或解决问题。 总…

iperf3带宽压测工具使用

iperf3带宽压测工具使用 安装下载地址&#xff1a;[下载入口](https://iperf.fr/iperf-download.php)测试结果&#xff1a;时长测试&#xff08;压测使用&#xff09;:并行测试反向测试UDP 带宽测试 iPerf3 是用于主动测试 IP 网络上最大可用带宽的工具 安装 下载地址&#x…

SAP 生产订单批量报工(代码分享)

最近公司一直在对成本这块的业务进行梳理,影响比较大的就是生产这块的报工,经常会要求要批量的冲销报工,然后在继续报工,来调整生产订单的实际工时,前面的博客中已经给大家分享了批量冲销生产订单的代码, 下面给大家分享一下生产订单批量报工的代码 首先流程制造和离散制…

如何解决研发数据传输层面安全可控、可追溯的共性需求?

研发数据在企业内部跨网文件交换&#xff0c;是相对较为普遍而频繁的文件流转需求&#xff0c;基于国家法律法规要求及自身安全管理需要&#xff0c;许多企业进行内部网络隔离。不同企业隔离方案各不相同&#xff0c;比如银行内部将网络隔离为生产网、办公网、DMZ区&#xff0c…

如何用ChatGPT上热门:完整使用教程与写作技巧

1. ChatGPT概述修订 ChatGPT是一款基于深度神经网络的语言生成技术&#xff0c;能够协助用户创造出各类高品质的文字材料&#xff0c;适宜广泛的应用场景&#xff0c;如编撰文章、文学创作及社交媒体内容生成。 2. 利用ChatGPT生成热门内容的基本步骤 为了有效利用ChatGPT创作…

代码随想录算法训练营第三十五 | ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

860.柠檬水找零 讲解链接&#xff1a;https://programmercarl.com/0860.%E6%9F%A0%E6%AA%AC%E6%B0%B4%E6%89%BE%E9%9B%B6.html 本题只有5元10元20元&#xff0c;只需要考虑收到5、10、20这三种情况&#xff1b; 收到5元&#xff0c;五块的个数&#xff1b; 收到10&#xff0c;找…

Appium安装及配置(Windows环境)

在做app相关自动化测试&#xff0c;需要使用appium来做中转操作&#xff0c;下面来介绍一下appium的环境安装配置 appium官方文档&#xff1a;欢迎 - Appium Documentation 一、下载appium 下载地址&#xff1a;https://github.com/appium/appium-desktop/releases?page3 通…

Java多线程--volatile关键字

并发编程的三大特性 可见性有序性原子性 可见性 为什么会有可见性问题&#xff1f; 多核CPU 为了提升CPU效率&#xff0c;设计了L1&#xff0c;L2&#xff0c;L3三级缓存&#xff0c;如图。 如果俩个核几乎同时操作同一块内存&#xff0c;cpu1修改完&#xff0c;当下是对c…

TDR原理的介绍

目录 简介 简单定义 TDR测试原理 简介 时域和频域就像孪生兄弟一样&#xff0c;经常在测试测量领域同时出现&#xff0c;可谓是工程师们分析问题和解决问题的两大法宝。所以&#xff0c;在某些测试场景中&#xff0c;如果有时域信息的护法&#xff0c;咱们就能从时频域两个维…

嵌入式Linux shell编程实例

1. 输入两个数&#xff0c;实现两个数的相加 &#xff08;1&#xff09;具体实现代码如下 1 #!/bin/bash2 read a3 read b4 sum$(($a$b))5 echo "$sum"&#xff08;2&#xff09;编辑完内容后按Esc键再输入:wq保存&#xff0c;回车退出&#xff0c;执行结果如下图&a…

uniapp创建支付密码实现(初始密码,第二次密码)

示例&#xff1a; 插件地址&#xff1a;自定义数字/身份证/密码输入框&#xff0c;键盘密码框可分离使 - DCloud 插件市场 1.下载插件并导入HBuilderX&#xff0c;找到文件夹&#xff0c;copy number-keyboard.vue一份为number-keyboard2.vue&#xff08;number-keyboard.vue是…

[数据集][目标检测]脑溢血检测数据集VOC+YOLO格式767张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;767 标注数量(xml文件个数)&#xff1a;767 标注数量(txt文件个数)&#xff1a;767 标注类别…

java 远程调试

1.远程启动时 jdk1.8-32\jre\bin\java.exe -Dfile.encodingUTF-8 -Djava.library.pathlib -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 -jar local-com.yuetai.service-0.0.1-SNAPSHOT.jar --spring.config.locationapplication.yml 2.本地调试项目连接远…

关于前端代码移动端的适配方案

为什么需要适配&#xff1f; 由于PC端和移动端的分辨率不同&#xff0c;前端展示的页面在两端设备如果原模原样的搬运则会导致PC端或移动端看到的画面相对于其设备的分辨率及其的不合理。 最为常见的是PC端正常浏览的网页没有做移动端适配&#xff0c;由于移动端分辨率普遍低于…

Base64码转换

title: Base64码转换 date: 2024-06-01 20:30:28 tags: vue3 后端图片前端显示乱码 现象 后端传来一个图片&#xff0c;前端能够接收&#xff0c;但是console.log()后发现图片变成了乱码&#xff0c;但是检查后台又发现能够正常的收到了这张图片。 处理方法 笔者有尝试将图…