博客系统自动化测试

1、博客列表页面测试

测试内容

测试代码:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogListTest extends Autotest{
    public static ChromeDriver driver = createDriver();
    // 准备工作
    @Test
    @BeforeAll
    static void ready() {
        driver.get("http://59.110.22.4:9011/blog_list.html");

    }
    // 导航栏测试
    @Test
    @Order(1)
    void navigationTest() throws InterruptedException {
        // 寻找 logo 图标
        driver.findElement(By.xpath("/html/body/div[1]/img"));
        // 寻找 "我的博客系统“
        Assertions.assertEquals("我的博客系统",driver.findElement(By.cssSelector("body > div.nav > span.title")).getText());
        // 寻找“主页”
        Assertions.assertEquals("主页",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText());
        // 寻找“写博客”
        Assertions.assertEquals("写博客",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).getText());
        // 寻找“登录”
        Assertions.assertEquals("登录",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText());

        // 点击写博客(未登录状态直接跳转到登录页面)
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        Assertions.assertEquals("http://59.110.22.4:9011/login.html",driver.getCurrentUrl());
        Thread.sleep(100);
        driver.navigate().back();
        // 点击登录
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        Assertions.assertEquals("http://59.110.22.4:9011/login.html",driver.getCurrentUrl());
        Thread.sleep(100);
        driver.navigate().back();

    }

    // 博客展示内容测试
    @Test
    @Order(2)
    void blogBriefTest() {
        // 寻找第一篇博客标题
        driver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > div.title"));
        // 寻找第一篇博客发布/修改时间
        driver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > div.date"));
        // 寻找第一篇博客的内容简介
        driver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > div.desc"));
        // 寻找第一篇博客的“查看全文”按钮
        // 点击“查看全文”按钮查看功能是否有效
        WebElement button1 = driver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > a"));
        Assertions.assertEquals("查看全文 >>",button1.getText());
        button1.click();
        // 将点击按钮后跳转到的网页的 URL与目标URL比较
        Assertions.assertEquals("http://59.110.22.4:9011/blog_content.html?id=1",driver.getCurrentUrl());
        // 返回上一页
        driver.navigate().back();

        // 寻找第二篇博客标题、发布时间、内容简介
        driver.findElement(By.cssSelector("#artListDiv > div:nth-child(2) > div.title"));
        driver.findElement(By.cssSelector("#artListDiv > div:nth-child(2) > div.date"));
        driver.findElement(By.cssSelector("#artListDiv > div:nth-child(2) > div.desc"));
        // 寻找第二篇博客的“查看全文”按钮
        // 点击“查看全文”按钮查看功能是否有效
        WebElement button2 = driver.findElement(By.cssSelector("#artListDiv > div:nth-child(2) > a"));
        Assertions.assertEquals("查看全文 >>",button2.getText());
        button2.click();

        // 判断当前网址和目标网址是否一致
        Assertions.assertEquals("http://59.110.22.4:9011/blog_content.html?id=2",driver.getCurrentUrl());
        driver.navigate().back();
    }
    // 首页、上一页、下一页、末页测试
    @Test
    @Order(3)
    void skipTest() {
        // 进入博客列表页时,已经位于首页,那么测试顺序就改成下一页,上一页,末页,首页
        WebElement nextPage = driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(3)"));
        Assertions.assertEquals("下一页",nextPage.getText());
        nextPage.click();
        // 判断当前网址是否和目标网址相同
        Assertions.assertEquals("http://59.110.22.4:9011/blog_list.html?pindex=2",driver.getCurrentUrl());

        // 测试上一页
        WebElement lastPage = driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(2)"));
        Assertions.assertEquals("上一页",lastPage.getText());
        lastPage.click();
        Assertions.assertEquals("http://59.110.22.4:9011/blog_list.html?pindex=1",driver.getCurrentUrl());

        // 测试末页
        WebElement tailPage = driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(4)"));
        Assertions.assertEquals("末页",tailPage.getText());
        tailPage.click();
        Assertions.assertEquals("http://59.110.22.4:9011/blog_list.html?pindex=3",driver.getCurrentUrl());

        // 测试首页
        WebElement headPage = driver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(1)"));
        Assertions.assertEquals("首页",headPage.getText());
        headPage.click();
        Assertions.assertEquals("http://59.110.22.4:9011/blog_list.html",driver.getCurrentUrl());

    }
    @AfterAll
    @Test
    static void exit() {
        driver.quit();
    }

}
测试结果

三个测试用例全部通过

测试总结

通过上述的一系列操作,我们测试了博客列表页的导航栏和博客列表页的主体,在博客导航栏,左边的logo正常显示,logo旁边的“我的博客系统”正常显示,而且功能正常,右边的“主页”、“写博客”、“登录”均正常显示,并且功能正常;博客列表页的主体有两篇博客,第二篇博客下面有四个按钮:首页、上一页、下一页、末页。通过测试,我们发现博客的标题、发布博客的时间、博客的简介、查看全文按钮均正常显示,查看全文按钮功能正常。首页、上一页、下一页、末页四个按钮均正常显示且功能正常。

2、注册页面测试

测试用例

测试代码:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class RegisterTest {
    public static ChromeDriver driver = createDriver();
    // 准备工作
    @Test
    @BeforeAll
    static void ready() {
        driver.get("http://59.110.22.4:9011/reg.html");


    }
    // 导航栏测试
    @Test
    @Order(1)
    void navigationTest() {
        // 寻找 logo 图标
        driver.findElement(By.xpath("/html/body/div[1]/img"));
        // 寻找 "我的博客系统“
        Assertions.assertEquals("我的博客系统",driver.findElement(By.cssSelector("body > div.nav > span.title")).getText());
        // 寻找“主页”
        Assertions.assertEquals("主页",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText());
        // 寻找“写博客”
        Assertions.assertEquals("写博客",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).getText());
        // 寻找“登录”
        Assertions.assertEquals("登录",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText());
    }
    // 检查页面元素是否存在
    @Test
    @Order(2)
    void findPageTest() {
        driver.findElement(By.cssSelector("body > div.login-container > div"));
        Assertions.assertEquals("注册",driver.findElement(By.cssSelector("body > div.login-container > div > h3")).getText());
        Assertions.assertEquals("用户名",driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(2) > span")).getText());
        Assertions.assertEquals("密码",driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(3) > span")).getText());
        Assertions.assertEquals("确认密码",driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(4) > span")).getText());
        Assertions.assertEquals("提交",driver.findElement(By.cssSelector("#submit")).getText());
        // 寻找三个输入框
        driver.findElement(By.cssSelector("#username"));
        driver.findElement(By.cssSelector("#password"));
        driver.findElement(By.cssSelector("#password2"));

    }

    @Order(3)
    @ParameterizedTest
    @CsvSource({"jcm,123,123"})
    void falseRegTest(String username, String password, String password2) throws InterruptedException {
        // 注册已经存在的账号
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password2")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#password2")).sendKeys(password2);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);
        Alert alert = driver.switchTo().alert();
        Assertions.assertEquals("执行失败,请稍后再试!",alert.getText());
        alert.accept();

    }

    @Order(4)
    @ParameterizedTest
    @CsvSource({"cmcm666,123,456"})
    void falseRegTest2(String username, String password, String password2) throws InterruptedException {
        // 注册时,密码和确认密码不一致
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password2")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#password2")).sendKeys(password2);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);
        Alert alert = driver.switchTo().alert();
        Assertions.assertEquals("两次密码输入的不一致,请先检查!",alert.getText());
        alert.accept();

    }

    @Order(5)
    @ParameterizedTest
    @CsvSource({"cmcm666,123,123"})
    void trueRegTest(String username, String password, String password2) throws InterruptedException {
        // 注册不存在的账号
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        driver.findElement(By.cssSelector("#password2")).clear();
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#password2")).sendKeys(password2);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);
        Alert alert = driver.switchTo().alert();
        Assertions.assertEquals("注册成功!是否跳转到登录界面?",alert.getText());
        alert.accept();

    }

    @AfterAll
    @Test
    static void exit() {
        driver.quit();
    }
}
测试结果

通过测试发现一个bug,在注册页面,导航栏的右边应该是“登录”而不是“登陆”。

接下来我们将刚才发现的bug在代码中先屏蔽掉,再次进行测试。

通过测试发现,测试用例全部通过没有bug。

测试总结

在上面我们对注册页面进行了两方面测试:页面显示和功能模块。通过测试我们得出结论:

  1. 注册页面的导航栏和整体布局可以正常显示,注册框中的文字、按钮均可以正常显示,但是导航栏最右边的”登录“字体存在bug。
  2. 用户如果注册一个已经存在的账号时,页面会提示用户“执行失败,请稍后再试!”。
  3. 用户在注册过程中,如果密码和确认密码不一致,页面会提示用户两次密码不一致,让用户进行检查。
  4. 注册页面的注册功能在注册一个不存在的用户时,按照正确的注册规则可以成功注册一个账号。

注册页面中存在一个bug:导航栏最右侧“登录”字样错误,并没有正确显示,而是显示“登陆”。

3、登录页面测试

测试用例

测试代码:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class LoginTest extends Autotest {
    public static ChromeDriver driver = createDriver();
    // 准备工作
    @Test
    @BeforeAll
    static void ready() {
        driver.get("http://59.110.22.4:9011/login.html");
    }
    // 导航栏测试
    @Test
    @Order(1)
    void navigationTest() throws InterruptedException {
        // 寻找 logo 图标
        driver.findElement(By.xpath("/html/body/div[1]/img"));
        // 寻找 "我的博客系统“
        Assertions.assertEquals("我的博客系统",driver.findElement(By.cssSelector("body > div.nav > span.title")).getText());
        // 寻找“主页”
        Assertions.assertEquals("主页",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText());
        // 寻找“写博客”
        Assertions.assertEquals("写博客",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).getText());
        // 寻找“登录”
        Assertions.assertEquals("登录",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText());

        // 点击主页,跳转到博客列表页面,
        // 未登录的情况下,点击写博客和登录,都会跳转到登录页面,不再测试
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).click();
        Assertions.assertEquals("http://59.110.22.4:9011/blog_list.html",driver.getCurrentUrl());
        Thread.sleep(100);
        driver.navigate().back();
    }

    // 检查页面元素是否存在
    @Test
    @Order(2)
    void findPageTest() {
        driver.findElement(By.cssSelector("body > div.login-container > div"));
        Assertions.assertEquals("登录",driver.findElement(By.cssSelector("body > div.login-container > div > h3")).getText());
        Assertions.assertEquals("用户名",driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(2) > span")).getText());
        Assertions.assertEquals("密码",driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(3) > span")).getText());
        Assertions.assertEquals("登录",driver.findElement(By.cssSelector("#submit")).getText());
        Assertions.assertEquals("注册",driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(5) > button")).getText());
        // 寻找用户名输入框和密码输入框
        driver.findElement(By.cssSelector("#username"));
        driver.findElement(By.cssSelector("#password"));
    }

    @Order(3)
    @Test
    void skipRegTest() throws InterruptedException {
        // 跳转到注册页面测试
        driver.findElement(By.cssSelector("body > div.login-container > div > div:nth-child(5) > button")).click();
        Assertions.assertEquals("http://59.110.22.4:9011/reg.html",driver.getCurrentUrl());
        Thread.sleep(100);
        driver.navigate().back();
    }
    @Order(4)
    @ParameterizedTest
    @CsvSource({"cmcm666,000"})
    void falseLoginTest1(String username, String password) throws InterruptedException {
        // 密码错误的情况
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入用户名和密码
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);
        // 查看 alert
        Alert alert = driver.switchTo().alert();
        Assertions.assertEquals("用户名或密码输入错误,请重试!",alert.getText());
        alert.accept();

    }

    @Order(5)
    @ParameterizedTest
    @CsvSource({"cmcmcm,123"})
    void falseLoginTest2(String username, String password) throws InterruptedException {
        // 用户名不存在的情况
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入用户名和密码
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);
        // 查看 alert
        Alert alert = driver.switchTo().alert();
        Assertions.assertEquals("用户名或密码输入错误,请重试!",alert.getText());
        alert.accept();

    }

    @Order(6)
    @ParameterizedTest
    @CsvSource({"cmcm666,123"})
    void trueLoginTest(String username, String password) throws InterruptedException {
        // 用户名和密码都正确的情况
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入用户名和密码
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);
        // 比较 URL
        Assertions.assertEquals("http://59.110.22.4:9011/myblog_list.html",driver.getCurrentUrl());

    }
    @AfterAll
    @Test
    static void exit() {
        driver.quit();
    }
}
测试结果

检测出两个bug:

两个bug均是“登录”字样出现错误。接下来我们先将两个错误从代码中屏蔽,再进行测试。

经过测试发现,测试用例全部通过。

测试总结

上面我们对登录页面进行了两方面测试:页面显示和功能模块。通过测试我们得出结论:

  1. 登录页面的导航栏和整体布局可以正常显示,登录框中的文字,输入框均可以正常显示,但是导航栏最右边的”登录“字体存在bug,而且登录框中的“登录”标题也存在bug。
  2. 在用户名不存在的情况下进行登录,则会提示“用户名或密码输入错误,请重试!”,无法登录,功能正常。
  3. 在密码错误的情况下进行登录,则会提示“用户名或密码输入错误,请重试!”,无法登录,功能正常。
  4. 在用户名和密码正确的情况下,点击登录按钮,会跳转到“我的博客列表”页面,功能正常。
  5. 在点击注册按钮时,会跳转到注册页面,功能正常。

注册页面中存在两个bug:

1、导航栏最右侧“登录”字样错误,并没有正确显示,而是显示“登陆”。

2、登录框中标题“登录”字样错误,并没有正确显示,而是显示“登陆”。

4、我的博客列表页面测试

测试用例

测试代码:

public class MyBlogListTest extends Autotest {
    public static ChromeDriver driver = createDriver();
    public static String username = "lisi";
    public static String password = "12345";
    // 准备工作
    @Test
    @BeforeAll
    static void ready() throws InterruptedException {
        driver.get("http://59.110.22.4:9011/login.html");
        // 登录账号(已知 lisi 已经写了四篇博客)
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入用户名和密码
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);
        Assertions.assertEquals("http://59.110.22.4:9011/myblog_list.html",driver.getCurrentUrl());
    }

    // 查找用户信息
    @Order(1)
    @Test
    void findUserInfo() {
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > img"));
        // 比较用户名和登录时的用户名是否一致
        Assertions.assertEquals(username,driver.findElement(By.cssSelector("#username")).getText());
        Assertions.assertEquals("github 地址",driver.findElement(By.cssSelector("body > div.container > div.container-left > div > a")).getText());
        Assertions.assertEquals("文章",driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(4) > span:nth-child(1)")).getText());
        Assertions.assertEquals("分类",driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(4) > span:nth-child(2)")).getText());
        driver.findElement(By.cssSelector("#artCount"));
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(5) > span:nth-child(2)"));

    }

    // 查找文章信息并测试文章按钮
    @Order(2)
    @Test
    void findArtInfo() {
        driver.findElement(By.cssSelector("#artDiv > div:nth-child(1)"));
        driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > div.title"));
        driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > div.date"));
        driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > div.desc"));
        Assertions.assertEquals("查看全文>>",driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > a:nth-child(4)")).getText());
        Assertions.assertEquals("修改文章>>",driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > a:nth-child(5)")).getText());
        Assertions.assertEquals("删除文章 >>",driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > a:nth-child(6)")).getText());

        // 查看全文按钮测试
        driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > a:nth-child(4)")).click();
        Assertions.assertEquals("http://59.110.22.4:9011/blog_content.html?id=2",driver.getCurrentUrl());
        driver.navigate().back();
        // 修改文章按钮测试
        driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > a:nth-child(5)")).click();
        Assertions.assertEquals("http://59.110.22.4:9011/blog_edit.html?id=2",driver.getCurrentUrl());
        driver.navigate().back();
        // 删除文章按钮测试
        driver.findElement(By.cssSelector("#artDiv > div:nth-child(1) > a:nth-child(6)")).click();
        Alert alert = driver.switchTo().alert();
        Assertions.assertEquals("确认是否删除?",alert.getText());
        // 点击确定删除文章,点击取消放弃删除
//        alert.accept();
        alert.dismiss();
    }

    // 导航栏测试
    @Test
    @Order(3)
    void navigationTest() throws InterruptedException {
        // 寻找 logo 图标
        driver.findElement(By.xpath("/html/body/div[1]/img"));
        // 寻找 "我的博客系统“
        Assertions.assertEquals("我的博客系统",driver.findElement(By.cssSelector("body > div.nav > span.title")).getText());
        // 寻找“主页”
        Assertions.assertEquals("主页",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText());
        // 寻找“写博客”
        Assertions.assertEquals("写博客",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).getText());
        // 寻找“退出”
        Assertions.assertEquals("退出",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText());

        // 点击主页,跳转到博客列表页面,
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).click();
        Assertions.assertEquals("http://59.110.22.4:9011/blog_list.html",driver.getCurrentUrl());
        Thread.sleep(100);
        driver.navigate().back();
        // 点击写博客,跳转到添加博客页面
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        Assertions.assertEquals("http://59.110.22.4:9011/blog_add.html",driver.getCurrentUrl());
        Thread.sleep(100);
        driver.navigate().back();

        // 点击退出,退出登录账号
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        Alert alert = driver.switchTo().alert();
        Assertions.assertEquals("确认注销?",alert.getText());
        // 点击确定退出账号,点击取消,取消退出账号
//        alert.accept();
        alert.dismiss();
        // 查看当前页面是否还在我的博客列表页面
        Assertions.assertEquals("http://59.110.22.4:9011/myblog_list.html",driver.getCurrentUrl());
    }

    @AfterAll
    @Test
    static void exit() {
        driver.quit();
    }
}
测试结果

通过测试发现一个bug:在点击导航栏的退出后,如果点击取消按钮,依然会退出账号。

测试总结

在上面我们对我的博客列表页面进行了两方面测试:页面显示和功能模块。通过测试我们得出结论:

  1. 我的博客列表页面的导航栏和整体布局可以正常显示。
  2. 左侧用户信息栏可以正确显示用户的信息,右侧博客列表栏也可以正确显示用户所写的博客。
  3. 右侧博客列表栏中的查看全文按钮、修改文章按钮、删除文章按钮都可以正确执行。
  4. 导航栏右侧退出按钮存在功能问题,点击退出之后弹出一个提示框,点击确定应该退出账号,点击取消应该停留在原页面,但是点击取消之后依然会退出账号。

我的博客列表页面在页面显示正常,查看全文、修改文章、删除文章按钮功能均正常,但是导航栏的退出按钮功能异常,无论选择确定还是取消都是退出账号。

5、博客正文页面测试

测试用例

测试代码:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogContentTest extends Autotest {
    public static ChromeDriver driver = createDriver();
    // 准备工作
    @Test
    @BeforeAll
    static void ready() {
        driver.get("http://59.110.22.4:9011/blog_content.html?id=1");

    }
    // 导航栏测试
    @Test
    @Order(1)
    void navigationTest() throws InterruptedException {
        // 寻找 logo 图标
        driver.findElement(By.xpath("/html/body/div[1]/img"));
        // 寻找 "我的博客系统“
        Assertions.assertEquals("我的博客系统",driver.findElement(By.cssSelector("body > div.nav > span.title")).getText());
        // 寻找“主页”
        Assertions.assertEquals("主页",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).getText());
        // 寻找“写博客”
        Assertions.assertEquals("写博客",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).getText());
        // 寻找“登录”
        Assertions.assertEquals("登录",driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).getText());

        // 点击写博客(未登录状态直接跳转到登录页面)
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        Assertions.assertEquals("http://59.110.22.4:9011/login.html",driver.getCurrentUrl());
        Thread.sleep(100);
        driver.navigate().back();

    }
    @Test
    @Order(2)
    void findUserInfo() {
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > img"));
        // 比较用户名和登录时的用户名是否一致
        driver.findElement(By.cssSelector("#username"));
        Assertions.assertEquals("gitee",driver.findElement(By.cssSelector("body > div.container > div.container-left > div > a")).getText());
        Assertions.assertEquals("文章",driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(4) > span:nth-child(1)")).getText());
        Assertions.assertEquals("分类",driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(4) > span:nth-child(2)")).getText());
        driver.findElement(By.cssSelector("#artCount"));
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(5) > span:nth-child(2)"));

    }
    // 查找文章信息并测试文章按钮
    @Order(3)
    @Test
    void findArtInfo() throws InterruptedException {
        driver.findElement(By.cssSelector("#title"));
        driver.findElement(By.cssSelector("#updatetime"));
        driver.findElement(By.cssSelector("#rcount"));
        driver.findElement(By.cssSelector("#editorDiv"));

        // 验证阅读量是否正确增加
        String rcount1 = driver.findElement(By.cssSelector("#rcount")).getText();
        int count1 = Integer.parseInt(rcount1);
        Thread.sleep(200);
        driver.navigate().refresh();
        String rcount2 = driver.findElement(By.cssSelector("#rcount")).getText();
        Assertions.assertEquals(count1+1,Integer.parseInt(rcount2));
    }

    @AfterAll
    @Test
    static void exit() {
        driver.quit();
    }

}
测试结果

三个测试用例,有两个通过,发现一个bug:因为测试时并未登录账号,所以导航栏右侧应该是“登录”,而页面中显示的却是“退出”。

测试总结

上面我们对博客正文页面进行了两方面测试:页面显示和功能模块。通过测试我们得出结论:

  1. 博客正文的导航栏和整体布局可以正常显示。
  2. 左侧用户信息栏可以正确显示作者的信息,右侧博客列表栏也可以正确显示博客的详细内容。
  3. 博客内容中的阅读量在刷新之后会增加一次,阅读量可以正确更新。
  4. 测试时并未登录账号,所以导航栏右侧应该是“登录”,而页面中显示的却是“退出”。

博客正文页面的功能模块正常,没有发现bug,但是页面显示出现bug,导航栏右侧显示的“退出”应该为“登录”。

6、添加博客页面测试

测试用例

代码示例:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogAddTest extends Autotest {
    public static ChromeDriver driver = createDriver();
    public static String username = "lisi";
    public static String password = "12345";
    // 准备工作
    @Test
    @BeforeAll
    static void ready() throws InterruptedException {
        driver.get("http://59.110.22.4:9011/login.html");
        // 登录账号(已知 lisi 已经写了四篇博客)
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入用户名和密码
        driver.findElement(By.cssSelector("#username")).sendKeys(username);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(100);
        Assertions.assertEquals("http://59.110.22.4:9011/myblog_list.html",driver.getCurrentUrl());
    }

    // 查找用户信息
    @Order(1)
    @Test
    void findUserInfo() {
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > img"));
        // 比较用户名和登录时的用户名是否一致
        Assertions.assertEquals(username,driver.findElement(By.cssSelector("#username")).getText());
        Assertions.assertEquals("github 地址",driver.findElement(By.cssSelector("body > div.container > div.container-left > div > a")).getText());
        Assertions.assertEquals("文章",driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(4) > span:nth-child(1)")).getText());
        Assertions.assertEquals("分类",driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(4) > span:nth-child(2)")).getText());
        driver.findElement(By.cssSelector("#artCount"));
        driver.findElement(By.cssSelector("body > div.container > div.container-left > div > div:nth-child(5) > span:nth-child(2)"));
    }
    @Order(2)
    @Test
    void skipAdd() throws InterruptedException {
//        跳转到添加博客页面
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
        // 查找添加博客页面“发布文章”按钮
        Assertions.assertEquals("发布文章",driver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button")).getText());
    }
    @Order(3)
    @Test
    void addContent() {
        WebElement title = driver.findElement(By.cssSelector("#title"));
        title.clear();
        title.sendKeys("个人博客系统测试");

        driver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button")).click();
        // 点击发布文章之后会出现两个提示框,第一个是“确认提交”提示框
        // 点击确定之后,则会发布文章,点击取消则停留在原页面
        Alert alert1 = driver.switchTo().alert();
//        alert1.dismiss();
        alert1.accept();

    }
    @AfterAll
    @Test
    static void exit() {
        driver.quit();
    }
}
测试结果

三个测试用例全部通过,但是并不说添加博客页面没有bug, 我们并没有测试添加博客页面的所有内容

上图中圈中的区域,因为太复杂我们就没有测试,但是可以看出,这一部分是存在bug的,因为大部分图标都没有显示出来,而是显示的□

测试总结

在上面我们对添加博客页面进行了两方面测试:页面显示和功能模块。通过测试我们得出结论:

  1. 添加博客页面的导航栏和整体布局可以正常显示。
  2. 在格式选择模块中,只有将小写字母转换成大写、将大写字母转换成小写、一~六号标题的图标正常显示,其他格式的图标都显示□,存在一个bug。
  3. 编写博客模块和内容显示模块显示正常。
  4. 点击发布文章,文章能够正常保存在列表中,保存博客功能正常。
  5. 退出功能异常,在退出时,点击确定能够正常退出账号,但是点击取消依然会退出账号。(我的博客列表页面进行过测试)

添加博客列表页面在页面显示和功能模块个存在一个bug:

1、页面显示:格式选择模块中的图片不能完全显示出来,大部分都是显示□。

2、功能模块:退出功能异常,点击取消,仍然会退出账号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值