论坛系统测试报告

目录

一. 简介

二. 测试环境 

三. 测试执行概况及功能测试

1. 手工测试

1.1. 手动编写测试用例

1.2. 手动执行的部分测试用例

1.3. 上述手工测试发现的bug

2. 自动化测试

2.1. 封装常用的方法

2.2. 注册页面测试

2.3. 登录界面测试

2.4. 显示帖子列表测试

2.5. 发布帖子测试

2.6. 查询帖子内容测试

2.7. 编辑修改帖子测试

2.8. 删除帖子测试

2.9. 我的帖子查询测试

2.10. 点赞测试

 2.11. 退出测试 



一. 简介

论坛是采用前后端分离的方式实现的 该系统旨在为用户提供一个基于 Web 的文章发布和讨论平台。用户可以进行注册登录、查看和修改个人信息,以及进行帖子的增删改查等基础操作。此外,系统还提供了评论、站内信等交流功能,用户可以对帖子进行点赞,并在帖子详情页上查看点赞数和阅读量等信息。

二. 测试环境 

硬件:Dell G15 2021 (i7-11800H/16GB/3050Ti)

操作系统:windows10;

浏览器:Chrome 版本 129.0.6668.59(正式版本) (64 位)

测试工具:黑盒测试,Selenium

自动化脚本运行环境: IntelliJ IDEA 2022.1.4

三. 测试执行概况及功能测试

1. 手工测试

1.1. 手动编写测试用例

功能测试用例:

非功能测试用例:

1.2. 手动执行的部分测试用例

对注册页面进行的测试

场景1:在输入部分注册信息时,由于信息不全,点击注册按钮后系统应该给出相应的提示。

预期结果:页面提示部分信息不能为空。

实际结果:系统确实给出了相应的提示,要求补全所有必填项,与预期一致。

场景2:输入一个已经存在的用户名,并确保密码和确认密码一致,然后点击注册按钮。

预期结果:系统应该提示用户该用户名已经存在。

实际结果:系统确实给出了提示,提示用户该用户名已经存在,与预期结果一致。

场景3:输入一个不存在的用户名,并且输入密码与确认密码不一致,然后点击注册按钮。

预期结果:系统应该提示用户检查确认密码是否输入一致。

实际结果:系统确实给出了相应的提示,指示用户检查确认密码,与预期结果一致

场景4:输入一个不存在的用户名,同时确保密码和确认密码一致,然后点击注册按钮。

预期结果:系统应该显示注册成功,并跳转回登录界面。

实际结果:系统确实显示了注册成功,并且跳转回了登录界面,符合预期。

对登录页面进行的测试

场景1:输入一个已经存在的用户名,并确保密码输入正确,然后点击登录按钮。

预期结果:系统应该显示登录成功,并跳转到论坛首页。

实际结果:系统确实显示了登录成功,并且跳转到了论坛首页,与预期结果一致


 

场景2:输入一个已经存在的用户名,并且输入错误的密码,然后点击登录按钮。

预期结果:系统应该显示登录失败,并给出相应的错误提示。

实际结果:系统确实显示了登录失败,并给出了错误提示,符合预期。

场景3:输入一个不存在的用户名,然后点击登录按钮。

预期结果:系统应该显示登录失败,并给出相应的错误提示。

实际结果:系统确实显示了登录失败,并给出了错误提示,符合预期。

对首页进行的测试

场景1:在未登录或登录过期的状态下,点击首页链接或手动输入首页地址。

预期结果:系统应该自动跳转回登录界面,要求用户重新登录。

实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。

场景2:在未登录状态下录或登录过期的状态下,点击首页中的任意一条帖子内容。

预期结果:系统应该自动跳转回登录界面,要求用户重新登录。

实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。

场景3:登录状态下,点击“首页”按钮。

预期结果:应该显示导航栏中的所有版块名称,下方应显示所有帖子列表,并且右上方应该显示登录用户的信息。

实际结果:系统确实展示了导航栏中的所有版块名称,下方显示了所有帖子列表,并且右上方显示了登录用户的信息,与预期一致。

场景4:登录状态下,点击导航栏中的版块名“Java”。

预期结果:系统应该展示 Java 版块的名称,该版块下的帖子数量,以及该版块下的所有帖子列表,并且右上方应该显示登录用户的信息。

实际结果:系统确实展示了 Java 版块的名称和帖子数量,同时显示了该版块下的所有帖子列表,并且右上方也显示了登录用户的信息,与预期一致。

场景5:登录状态下,在搜索框中输入关键字“测试”进行搜索。

预期结果:系统应该显示下方所有帖子正文中包含关键字“多线程”的帖子。

实际结果:由于项目目前未实现搜索功能,实际结果是刷新回到首页界面,与预期不符。

场景6:登录状态下,点击“月亮”按钮。

预期结果:系统应该进入夜间模式的切换。

实际结果:系统确实执行了夜间模式的切换操作,与预期一致。

场景7:登录状态下,点击“发布帖子”按钮。

预期结果:系统应该进入帖子编辑页面,且版块名默认选择 Java。

实际结果:系统确实进入了帖子编辑页面,并且版块名默认选择了 Java,符合预期。

对编辑页面进行的测试

场景1:未登录状态下(登录过期),尝试进入编辑页面。

预期结果:系统应该自动跳转回登录界面,要求用户重新登录。

实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。

场景2:在登录状态下,发布帖子时不输入帖子标题,只输入帖子内容,然后点击发布按钮。

预期结果:系统应该给出提示,要求用户输入帖子标题。

实际结果:系统确实给出了提示,要求用户输入帖子标题,与预期一致。

场景3:登录状态下,输入了帖子标题但没有输入帖子内容,然后点击发布按钮。

预期结果:系统应该给出提示,要求用户输入帖子内容。

实际结果:系统确实给出了提示,要求用户输入帖子内容,与预期一致。

场景4:登录状态下,输入了帖子标题和帖子内容,然后点击发布按钮。

预期结果:系统应该成功编辑帖子,并跳转回首页,最上方应该显示刚发布的帖子信息。

实际结果:系统确实执行了编辑成功的操作,跳转回了首页,并在最上方显示了刚发布的帖子信息,与预期一致。

对帖子详情页面进行的测试

场景1:未登录或者登录过期的状态下,点击首页中的任意一条帖子内容。

预期结果:系统应该自动跳转回登录界面,要求用户重新登录。

实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。

场景2:登录状态下,点击首页中的一条帖子内容,例如“第一篇帖子”。

预期结果:系统应该跳转到该帖子的详情页面。

实际结果:系统确实跳转到了该帖子的详情页面,与预期一致。

场景3:登录状态下,点击首页中的一条帖子内容,“第一篇帖子”(帖子作者“乾”,当前登录作者“hz”)。

预期结果:系统应该跳转到该帖子的详情页面,最上方应该显示该帖子的信息,左侧应该显示帖子作者的信息,下方应该显示该帖子的内容,而下方应该只显示点赞按钮。

实际结果:系统确实展示了预期的内容,包括帖子信息、作者信息、帖子内容以及点赞按钮,与预期一致。

场景4:登录状态下,点击帖子详情页面上的点赞按钮。

预期结果:应该看到上方显示的点赞数加1。

实际结果:系统确实执行了点赞操作,上方显示的点赞数加1,与预期一致。

场景5:登录状态下,点击首页中的一条帖子内容,“123”(帖子作者“梧桐”,当前登录作者“梧桐”)。

预期结果:系统应该跳转到该帖子的详情页面,最上方应该显示该帖子的信息,左侧应该显示帖子作者的信息,下方应该显示该帖子的内容,而下方应该显示点赞按钮、删除按钮和编辑按钮。

实际结果:系统确实展示了预期的内容,包括帖子信息、作者信息、帖子内容以及点赞按钮、删除按钮和编辑按钮,与预期一致。

1.3. 上述手工测试发现的bug

  1. 在给帖子进行评论时,尽管评论可以成功发布,但是评论输入框中的内容并没有自动清空。
  2. 个人中心的发帖数量更新不及时,即使在登录状态下发布新帖子或者删除旧帖子,个人中心页面刷新几次后仍然显示相同的帖子数量,需要退出登录并重新登录才能正常更新显示。  
  3.  在编辑界面中,编辑器有时加载不完全,导致无法进行编辑操作,需要手动刷新页面才能解决该问题。

2. 自动化测试

2.1. 封装常用的方法

这部分代码是为了在测试过程中初始化和关闭浏览器驱动,并提供了截图功能来记录测试执行的结果。
提供了以下功能:

  1. 在测试开始前,通过 Selenium WebDriver 初始化浏览器驱动(ChromeDriver)。
  2. 获取屏幕截图并保存的方法(getScreenShot),根据时间戳生成文件名并将截图保存到指定路径。

    void createDriver (String url){
        WebDriverManager.chromedriver().setup();
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        driver = new ChromeDriver(options);
        driver.get(url);
    }
void getScreenshot(String str) throws IOException {
        //初级版本截图
//        File file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
//        FileUtils.copyFile(file,new File("mytest.png"));
        //高级截图,图片分组
//        ./src/test/image/
//                          /2024-07-12/
//                                      /test01-12253062.png
//                                      /test01-12253082.png
//                          /2024-07-19/
//                                      /test01-12253062.png
        //设置时间格式
        SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");
        //获取时间
        String dirTime = sim1.format(System.currentTimeMillis());
        String fileTime = sim2.format(System.currentTimeMillis());
        //创建存储路径
        String filename = "./src/test/image/"+dirTime+"/"+str+"-"+fileTime+".png";
        System.out.println("filename:"+filename);
        //截图
        File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        //放到文件夹中
        FileUtils.copyFile(srcFile,new File(filename));
    }

2.2. 注册页面测试

2.2.1. 验证注册成功的情况
场景1:注册用户名在数据库中不存在,昵称正常输入,两次密码输入一致,执行注册操作后,预期注册成功并跳转回登录页面。

具体流程如下:

使用 WebDriver 打开登录页面。
点击页面中的注册按钮,跳转到注册页面。
输入不存在于数据库中的用户名 “haha17”、昵称 “haha”,并输入两次相同的密码 “123”。
勾选同意协议复选框。
点击注册按钮进行注册。
等待页面跳转,然后获取当前页面的 URL。
判断页面跳转后的 URL 是否是预期的登录页面的 URL。
如果跳转成功,断言注册成功。

void regSuccess() throws IOException, InterruptedException {
        //创建驱动对象,并打开登陆页面
        createDriver("http://127.0.0.1:9580/sign-in.html");

        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        //点击注册按钮跳转
        driver.findElement(By.cssSelector("body > div.page.page-center >" +
                                         " div > div > div:nth-child(1) > div" +
                                         " > div.text-center.text-muted.mt-3 > a")).click();
        //输入用户名
        driver.findElement(By.cssSelector("#username")).sendKeys("haha17");
        //输入昵称
        driver.findElement(By.cssSelector("#nickname")).sendKeys("haha");
        //输入密码
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        //输入确认密码
        driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");
        //点击同意许可
        driver.findElement(By.cssSelector("#policy")).click();
        //点击注册按钮
        driver.findElement(By.cssSelector("#submit")).click();
        System.out.println(driver.findElement(By.cssSelector("#submit")).getText());
        Thread.sleep(2000);
        //注册成功后会跳转到登录页面
        String loginHtmlUrl = "http://127.0.0.1:9580/sign-in.html";
        //获取当前页面的URL
        String nowUrl = driver.getCurrentUrl();
        //截图记录
        getScreenshot(getClass().getName());
        //断言
        assert nowUrl.equals(loginHtmlUrl);
    }

2.2.2. 验证注册失败的情况
场景2:用户名已存在于数据库中,但昵称和两次输入的密码仍然符合要求,执行注册操作后,预期注册失败并停留在注册页面。

具体流程如下:

使用 WebDriver 打开登录页面。
点击页面中的注册按钮,跳转到注册页面。
输入已存在于数据库中的用户名 “wangzian”、昵称 “hz”,并输入两次相同的密码 “123”。
勾选同意协议复选框。
点击注册按钮进行注册。
等待页面响应,获取当前页面的 URL。
判断页面是否停留在注册页面,即当前页面的 URL 是否是预期的注册页面的 URL。
如果停留在注册页面,断言注册失败。

 void regAbnomal() throws IOException, InterruptedException {
        //创建驱动对象,并打开登陆页面
        createDriver("http://127.0.0.1:9580/sign-in.html");

        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        //点击注册按钮跳转
        driver.findElement(By.cssSelector("body > div.page.page-center >" +
                " div > div > div:nth-child(1) > div" +
                " > div.text-center.text-muted.mt-3 > a")).click();
        //输入用户名
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        //输入昵称
        driver.findElement(By.cssSelector("#nickname")).sendKeys("hz");
        //输入密码
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        //输入确认密码
        driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");
        //点击同意许可
        driver.findElement(By.cssSelector("#policy")).click();
        //点击注册按钮
        driver.findElement(By.cssSelector(" #submit")).click();

        Thread.sleep(2000);
        //注册失败后不会跳转
        String regHtmlUrl = "http://127.0.0.1:9580/sign-up.html";
        //获取当前页面的URL
        String nowUrl = driver.getCurrentUrl();
        //截图记录
        getScreenshot(getClass().getName());
        //断言
        assert nowUrl.equals(regHtmlUrl);
    }

 

2.3. 登录界面测试

2.3.1. 登录失败测试
场景1:用户名正确但密码错误,执行登录操作后,预期登录失败并出现警告提示。

具体流程如下:

使用 WebDriver 打开论坛的登录页面。
输入正确的用户名 “admin” 和错误的密码 “123”。
点击登录按钮进行登录操作。
等待页面响应并获取警告提示的文本内容。
验证警告提示内容是否与预期一致。
截图保存测试结果。
断言警告提示内容与预期是否一致

 void loginAbnormal() throws IOException, InterruptedException {
//        使用 WebDriver 打开论坛的登录页面。
        createDriver("http://127.0.0.1:9580/sign-in.html");

//        输入正确的用户名 “wangzian” 和错误的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("1234");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//        等待页面响应并获取警告提示的文本内容。
        String str = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2")).getText();
//        验证警告提示内容是否与预期一致。
        getScreenshot(getClass().getName());
//        截图保存测试结果。
        assert str.equals("警告");
    }

2.3.2. 登录成功测试
场景2:用户名和密码都正确,执行登录操作后,预期登录成功并跳转到系统主页。

具体流程如下:

使用 WebDriver 打开论坛的登录页面。
用户名和密码数据,例如 “wutong, 123456”。
输入正确的用户名和密码。
点击登录按钮进行登录操作。
等待页面响应并获取当前首页元素。
确保登录成功后跳转到系统主页。

    void loglinSuccess() throws IOException {
        createDriver("http://127.0.0.1:9580/sign-in.html");

//        输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//        等待页面响应进入首页,检查页面是否有首页标题
        driver.findElement(By.cssSelector("#article_list_board_title"));
        getScreenshot(getClass().getName());
//        截图保存测试结果。
    }

2.4. 显示帖子列表测试

2.4.1. 未登录状态下测试
场景1:未登录状态下,直接通过 URL 访问主页帖子列表,预期返回登录页面。

具体流程如下:

使用 WebDriver 直接访问论坛的主页列表页面。
获取当前页面的 URL。
验证当前页面的 URL 是否是预期的登录页面的 URL。
截图保存测试结果。
断言当前页面的 URL 是否与预期的登录页面的 URL 一致,确保未登录状态下访问主页列表会被重定向到登录页面。

void BlogList1() throws InterruptedException, IOException {
        //打开列表页
        createDriver("http://127.0.0.1:9580/index.html");
        String loginUrl = "http://127.0.0.1:9580/sign-in.html";
        Thread.sleep(2000);
        //获取当前页面的URl
        String nowUrl = driver.getCurrentUrl();
        //截图记录
        getScreenshot(getClass().getName());
        //断言
        assert nowUrl.equals(loginUrl);
    }

2.4.2. 登录状态下测试
场景2:登录状态下,进入论坛首页,验证页面是否正确显示帖子相关的控件信息。

具体流程如下:

使用 WebDriver 进行登录操作,输入用户名和密码并点击登录按钮。
等待页面响应,并验证页面的导航栏是否显示了 “首页” 文本。
截图保存测试结果。
断言导航栏中是否包含 “首页” 文本,确保页面正确显示了导航栏信息。
查看是否有发布帖子的按钮,并点击该按钮。
等待页面响应,查看是否跳转到了帖子编辑页面,并验证页面是否包含 “发新贴” 文本。
截图保存测试结果。
断言页面是否包含 “发新贴” 文本,确保跳转到了帖子编辑页面。

 void BlogList2() throws InterruptedException, IOException {
        //打开登录页
        createDriver("http://127.0.0.1:9580/sign-in.html");

//        输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//        等待页面响应进入首页,检查页面是否有首页标题
        driver.findElement(By.cssSelector("#article_list_board_title"));
//         定位发帖子按钮并点击
        driver.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();
//        定位发新帖标签
        String text = driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
//        截图
        getScreenshot(getClass().getName());
        assert text.equals("发新贴");
    }

2.5. 发布帖子测试

2.5.1. 登录后测试标题和内容其中一个为空
场景1:登录后,点击发布帖子,进入编辑页分别 输入帖子标题但不输入帖子内容 和 不输入帖子标题但输入帖子内容,分别点击发布按钮,测试这两种情况能否成功发布。

具体流程如下:

场景1):登录状态下,测试标题和内容其中一个为空时,发布帖子失败并出现相应提示。

打开登录页面,输入用户名和密码进行登录。
点击发布帖子按钮,进入帖子编辑页面。
第一个场景中,只输入标题而不输入内容,点击发布按钮。
验证发布失败后页面出现的提示信息是否为 “请输入帖子内容”。
截图保存测试结果并断言提示信息是否符合预期。
场景2):不输入标题,只输入内容时,发布帖子失败并出现相应提示。

清空标题输入框内容。
编辑帖子内容,因为使用了第三方md插件,不能直接通过sendkeys输入内容,通过模拟点击事件插入内容。
点击发布按钮。
验证发布失败后页面出现的提示信息是否为 “请输入帖子标题”。
截图保存测试结果并断言提示信息是否符合预期。

   void writeBlog1() throws IOException, InterruptedException {
        //打开登录页
        createDriver("http://127.0.0.1:9580/sign-in.html");

//        输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
//        等待页面响应进入首页,检查页面是否有首页标题
        driver.findElement(By.cssSelector("#article_list_board_title"));
//         定位发帖子按钮并点击
        driver.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();
//        定位发新帖标签
        String text = driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
//        截图
        getScreenshot(getClass().getName());
        //确认进入发贴页
        assert text.equals("发新贴");
        //输入标题
        driver.findElement(By.cssSelector("#article_post_title")).sendKeys("自动化测试");
        Thread.sleep(2000);

        //点击发布#article_post_submit
        // 使用 Actions 类可以模拟鼠标操作
        WebElement element = driver.findElement(By.cssSelector("#article_post_submit"));
        Actions actions = new Actions(driver);
        actions.moveToElement(element).click().perform();

        //查看提示
         text = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2")).getText();
        getScreenshot(getClass().getName());
         assert text.equals("提示");
        //清空标题,输入内容
        driver.findElement(By.cssSelector("#article_post_title")).clear();
        //内容区域不支持sendKeys输入,但是可以点击
        driver.findElement(By.cssSelector("#edit-article > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i")).click();
        //点击发布
        driver.findElement(By.cssSelector("#article_post_submit")).click();
        text = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2")).getText();
        getScreenshot(getClass().getName());
        assert text.equals("提示");
    }

 2.5.2. 登录后测试标题和内容都不为空
场景:登录后,点击发布帖子,进入编辑页输入帖子标题帖子内容,预期能够成功发布。

具体流程如下:

打开登录页面,输入用户名和密码进行登录。
点击发布帖子按钮,进入帖子编辑页面。
输入标题和内容,这里测试输入的标题为 “测试发布”。
点击发布按钮。
等待页面响应,验证发布成功后是否跳转到首页,并查看首页的帖子列表中是否包含刚发布的标题 “测试发布”。
截图保存测试结果并断言首页帖子列表中是否包含期望的标题。

 void writeBlog2() throws InterruptedException, IOException {
        //打开登录页
        createDriver("http://127.0.0.1:9580/sign-in.html");

//        输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
//        等待页面响应进入首页,检查页面是否有首页标题
        driver.findElement(By.cssSelector("#article_list_board_title"));
//         定位发帖子按钮并点击
        driver.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();
//        定位发新帖标签
        String text = driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
//        截图
        getScreenshot(getClass().getName());
        //确认进入发贴页
        assert text.equals("发新贴");
        //输入标题
        driver.findElement(By.cssSelector("#article_post_title")).sendKeys("自动化测试");
        //点击的方式加入内容
        driver.findElement(By.cssSelector("#edit-article > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i")).click();

        Thread.sleep(2000);

        //点击发布#article_post_submit
        // 使用 Actions 类可以模拟鼠标操作
        WebElement element = driver.findElement(By.cssSelector("#article_post_submit"));
        Actions actions = new Actions(driver);
        actions.moveToElement(element).click().perform();
        Thread.sleep(2000);
        //检查首页标签,判断是否发布成功
        text = driver.findElement(By.cssSelector("#article_list_board_title")).getText();
        //截图记录
        getScreenshot(getClass().getName());
        assert text.equals("首页");
    }

2.6. 查询帖子内容测试


场景1:登录后,查看帖子内容,分别查看 帖子作者和当前登录用户一致 和 不一致 的帖子,是否正确显示对应帖子的信息。

具体流程如下:

点击帖子标题为“测试”的帖子,验证帖子标题是否正确,是否有点赞按钮,并截图保存测试结果。
点击帖子标题为“自动化测试”的帖子,验证帖子标题是否正确,是否有点赞按钮、编辑按钮和删除按钮,并截图保存测试结果。

    void showBlog() throws InterruptedException, IOException {
        //查看别人的贴子,有点赞按钮,没有删除按钮
        createDriver("http://127.0.0.1:9580/sign-in.html");
        //        输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
//        点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        //点击页面第一个帖子的标题
        driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).click();
        //定位发布时间,浏览,点赞,评论标签
        driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none " +
                "> div > div.col-auto.d-none.d-md-inline > ul"));
        //定位点赞按钮
        String text = driver.findElement(By.cssSelector("#details_btn_like_count")).getText();
        //截图
        getScreenshot(getClass().getName());
        assert text.equals("点赞");
    }

void showBlog2() throws InterruptedException, IOException {
        //查看自己的贴子,有点赞按钮,有删除按钮
        createDriver("http://127.0.0.1:9580/sign-in.html");
        // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
       // 点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        //点击页面第一个帖子的标题
        driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).click();
        Thread.sleep(2000);
        //定位发布时间,浏览,点赞,评论标签
        driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none " +
                "> div > div.col-auto.d-none.d-md-inline > ul"));
        //定位点赞按钮
        driver.findElement(By.cssSelector("#details_btn_like_count"));
        //获取删除按钮的文字
        String text = driver.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")).getText();
        System.out.println(text);
        //截图
        getScreenshot(getClass().getName());
        assert text.equals("删除");
    }

2.7. 编辑修改帖子测试

 场景1:登录状态下,修改登录用户自己的帖子,修改标题和内容,重新发布,重新查看帖子内容看是否更新。

具体流程如下:

登录并点击帖子标题为“与风行”的帖子,进入帖子详情页。
点击编辑按钮,跳转到编辑页面。
清空原标题,更新标题为“自动化修改标题”,同时添加样式表示修改。
点击提交按钮,保存修改并跳转到主页。
验证帖子列表中相应帖子的标题是否已更新为“自动化修改标题”。

 void updataBlog() throws InterruptedException, IOException {
        //查看自己的贴子,有点赞按钮,有删除按钮
        createDriver("http://127.0.0.1:9580/sign-in.html");
        // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        getScreenshot(getClass().getName());
        //点击页面第一个帖子的标题
        driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).click();
        Thread.sleep(2000);
        //定位编辑按钮,并点击
        driver.findElement(By.cssSelector("#details_artile_edit > span")).click();
        Thread.sleep(2000);
        //定位标题输入框,并清除之前的内容
        driver.findElement(By.cssSelector("#edit_article_title")).clear();
        //重新输入
        driver.findElement(By.cssSelector("#edit_article_title")).sendKeys("自动化修改标题!");
        //点击页面下方提交按钮
        // 使用 Actions 类可以模拟鼠标操作
        WebElement element = driver.findElement(By.cssSelector("#edit_article_submit > span"));
        Actions actions = new Actions(driver);
        actions.moveToElement(element).click().perform();
        Thread.sleep(2000);
        String text = driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).getText();
        //截图记录
        getScreenshot(getClass().getName());
        assert text.equals("自动化修改标题!");
    }

 

2.8. 删除帖子测试

场景1:登录状态下,进入帖子详情页,点击删除按钮,删除帖子成功,成功跳转回帖子列表页面。

具体流程如下:

登录并点击第一个帖子标题为“测试发布”的帖子,进入帖子详情页。
在帖子详情页点击删除按钮,弹出删除确认弹窗。
点击确定按钮,确认删除帖子。
验证帖子列表中第一条帖子标题是否已更新为其他值(比如"1111")

void deleteBlog() throws InterruptedException, IOException {
        //删除自己写的帖子
        createDriver("http://127.0.0.1:9580/sign-in.html");
        // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        //点击进入第一个贴子,并记录第二个帖子标题
        String text = driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(2) " +
                "> div > div.col > div.text-truncate > a > strong")).getText();
        driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).click();
        Thread.sleep(1000);
        //定位删除按钮,并点击
        driver.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 > span")).click();
        Thread.sleep(1000);
        //定位提示弹窗,并点击删除按钮
        driver.findElement(By.cssSelector("#details_artile_delete")).click();
        Thread.sleep(1000);
        //跳转到首页,获取的一个帖子的标题,用于对比
        String newtext = driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) " +
                "> div > div.col > div.text-truncate > a > strong")).getText();
        getScreenshot(getClass().getName());
        assert newtext.equals(text);
    }


 

2.9. 我的帖子查询测试

场景1:登录状态下,进入主页,点击我的帖子,跳转到个人中心页面,显示用户昵称等信息。

具体流程如下:

  1. 登录并点击头像,进入个人中心查看选项。
  2. 点击我的帖子。
  3. 验证我的帖子详情页面中注册账号时间。
 void myBlog() throws InterruptedException, IOException {
        createDriver("http://127.0.0.1:9580/sign-in.html");
        // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        //Thread.sleep(1000);
        //点击头像
        driver.findElement(By.cssSelector("#index_nav_avatar")).click();
        //点击我的帖子
        driver.findElement(By.cssSelector("#index_user_profile")).click();
        //进入个人主页可以看到账号注册时间,查看元素
        driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none " +
                "> div > div > div.col > div > div:nth-child(3)"));
        getScreenshot(getClass().getName());
    }

2.10. 点赞测试

场景1:登录状态下,进入帖子详情页,点击点赞按钮,验证点赞数是否相应增加。

具体流程如下:

  1. 登录并进入帖子详情页。
  2. 获取点赞前的点赞数。
  3. 点击点赞按钮。
  4. 获取点赞后的点赞数。
  5. 验证点赞后的点赞数是否等于点赞前的点赞数加一

void showLike() throws IOException, InterruptedException {
        createDriver("http://127.0.0.1:9580/sign-in.html");
        // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        //Thread.sleep(1000);
        //点击一个帖子
        driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div " +
                "> div.col > div.text-truncate > a > strong")).click();
        Thread.sleep(1000);

        //查看帖子的点赞数
        String cur = driver.findElement(By.cssSelector("#details_article_likeCount")).getText();
        //点击点赞按钮
        driver.findElement(By.cssSelector("#details_btn_like_count")).click();
        Thread.sleep(1000);
        String now = driver.findElement(By.cssSelector("#details_article_likeCount")).getText();
        getScreenshot(getClass().getName());
        int num = Integer.parseInt(now)-Integer.parseInt(cur);
        assert num==1;
    }

 2.11. 退出测试 

  场景1:登录后,点击用户头像下的退出按钮,跳转回登录界面,退出成功。

具体流程如下:

登录并进入个人中心页面。

点击头像,再点击退出。

验证退出后是否跳转到登录页面 

void Exit() throws IOException {
        createDriver("http://127.0.0.1:9580/sign-in.html");
        // 输入正确的用户名 “wangzian” 和正确的密码 “1234”。
        driver.findElement(By.cssSelector("#username")).sendKeys("wangzian");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        // 点击登录按钮进行登录操作。
        driver.findElement(By.cssSelector("#submit")).click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        //Thread.sleep(1000);
        //点击头像
        driver.findElement(By.cssSelector("#index_nav_avatar")).click();
        //点击退出
        driver.findElement(By.cssSelector("#index_user_logout > span")).click();
        getScreenshot(getClass().getName());
        //获取当前URL
        String url = driver.getCurrentUrl();
        assert url.equals("http://127.0.0.1:9580/sign-in.html");

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值