星云曲库测试报告

news2024/11/29 2:59:47

文章目录

  • 一、项目介绍
    • 1.1项目背景
    • 1.2功能介绍
  • 二、测试环境
  • 三、测试执行过程
    • 3.1功能测试
      • 3.1.1登录页面测试
      • 3.1.2歌曲列表页面测试
      • 3.1.3“我喜欢”页面测试
      • 3.1.4上传页面测试
    • 3.2界面自动化测试
      • 3.2.1登录页面测试
      • 3.2.2歌曲列表页面测试
      • 3.2.3“我喜欢”页面测试
      • 3.2.4上传页面测试
  • 四、测试结论与建议

一、项目介绍

1.1项目背景

这是一款可以播放歌曲的网站,用户可以播放自己上传的歌曲,也可以播放其他用户上传的歌曲。作为开放的歌曲分享平台,我们可以在市面上的音乐软件中下载好VIP歌曲,然后将下载好的歌曲上传到这个网站,这样其他在市面上的音乐软件中没有VIP的朋友就可以聆听到VIP歌曲了。实现一次VIP下载,广泛聆听。

1.2功能介绍

登录、播放歌曲、把歌曲标记为喜欢、删除歌曲、上传歌曲、搜索歌曲(模糊查询)、取消喜欢

二、测试环境

Windows10教育版、Chrome浏览器(版本 123.0.6312.59)

三、测试执行过程

3.1功能测试

3.1.1登录页面测试

测试点:在这里插入图片描述
1、输入用户名为空密码不为空,提示用户名或密码不能为空
输入用户名不为空密码为空,提示用户名或密码不能为空
测试结果显示功能正常: 在这里插入图片描述
在这里插入图片描述
2、输入正确的用户名错误的密码登录失败
输入错误的用户名正确的密码登录失败
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
3、输入密码时密码要显示成小黑点
测试结果显示功能异常,输入密码时显示的不是密文:
在这里插入图片描述
4、在没有登录之前,无法访问登录页面之外的页面
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5、输入正确的用户名正确的密码登录成功,跳转到歌曲列表页面
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
6、登录之后,可以随机访问登录页面之外的页面
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.2歌曲列表页面测试

测试点:
在这里插入图片描述

1、点击上传歌曲按钮,跳转到上传页面
点击我喜欢按钮,跳转到“我喜欢”页面
没有选中歌曲,点击删除选中歌曲按钮,页面上的歌曲数量不会减少
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、在搜索框输入“乐”字然后点击搜索按钮,能搜索到“快乐星猫”和“快乐星猫 - 副本”两首歌
在搜索框输入“乐”字然后点击搜索按钮,然后清除输入的“乐”字,再次点击搜索按钮,搜索出歌曲列表全部歌曲
在搜索框输入“银”字点击搜索按钮,搜索到的歌曲为空
测试结果显示功能正常:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3、点击“四季予你”歌曲的播放按钮后可以播放“四季予你”歌曲
测试结果显示功能正常:
在这里插入图片描述
4、点击“四季予你”歌曲的喜欢按钮后可以将“四季予你”歌曲添加到“我喜欢”
已经将“四季予你”歌曲添加到“我喜欢”后,再次点击喜欢按钮会提示“歌曲以前已添加到我喜欢列表,不能再次添加!”
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5、点击“四季予你”歌曲的删除按钮后可以删除“四季予你”歌曲
点击“四季予你”歌曲的删除按钮后可以删除“四季予你”歌曲,同时也会将“四季予你”歌曲移除出“我喜欢”
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
6、选中“快乐星猫”和“快乐星猫 - 副本”两首歌曲后,点击删除选中歌曲按钮,可以批量删除这两首歌曲
选中“快乐星猫”和“快乐星猫 - 副本”两首歌曲后,点击删除选中歌曲按钮,可以批量删除这两首歌曲,同时将这两首歌曲移出“我喜欢”
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
7、点击登录按钮会回到登录页面
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述

3.1.3“我喜欢”页面测试

测试点:
在这里插入图片描述

1、点击“快乐星猫”歌曲的播放按钮后可以播放“快乐星猫”歌曲
在这里插入图片描述
2、在搜索框输入“乐”字然后点击搜索按钮,能搜索到“快乐星猫”和“快乐星猫 - 副本”两首歌
在搜索框输入“乐”字然后点击搜索按钮,然后清除输入的“乐”字,再次点击搜索按钮,搜索出“我喜欢”列表全部歌曲
在搜索框输入“银”字点击搜索按钮,搜索到的歌曲为空
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、点击“快乐星猫”歌曲的移除按钮后可以将“快乐星猫”歌曲移出“我喜欢”
点击“快乐星猫”歌曲的移除按钮后可以将“快乐星猫”歌曲移出“我喜欢”,同时“快乐星猫”歌曲依然在歌曲列表
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4、开一个新的窗口,在这个窗口移除“快乐星猫-副本”歌曲,然后再回到原来的窗口,这时原来的窗口应该看不到“快乐星猫-副本”歌曲
测试结果显示功能异常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5、点击返回按钮可以回到歌曲列表页面
点击登录按钮会回到登录页面
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.1.4上传页面测试

测试点:
在这里插入图片描述
1、没有选择要上传的歌曲文件没有填歌手名时点击上传按钮,显示“您还未填写歌手名”
没有选择要上传的歌曲文件填写了歌手名时点击上传按钮,显示“您还未选择要上传的歌曲文件”
选择了上传的文件歌曲没有填写歌手名时点击上传按钮,显示“您还未填写歌手名”
测试结果显示功能正常:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/cfe3e41f31ea
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、选择了已经上传过的歌曲文件填写了歌手名时点击上传按钮,显示“该歌曲已经上传过,不能继续上传!”
选择了没有上传过的歌曲文件填写了歌手名时点击上传按钮,上传成功,跳转到歌曲列表页面
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
3、选择了非歌曲文件(非mp3文件)填写了歌手名时点击上传按钮,上传失败
测试结果显示功能异常,非mp3文件也能上传成功:
在这里插入图片描述
在这里插入图片描述

3.2界面自动化测试

自动化脚本源码链接

3.2.1登录页面测试

测试点:
在这里插入图片描述
自动化脚本代码:

    @Order(1)
    @ParameterizedTest
    @CsvSource({"'http://127.0.0.1:8080/login.html', '火雷霆', '111', '333', '3333', 'http://127.0.0.1:8080/musiclist.html'"})
    void login(String openuUrl, String currentUsername, String currentPassword, String errorUsername,
               String errorPassword, String jumpUrl) throws InterruptedException {
        //输入用户名为空密码不为空,提示用户名或密码不能为空
        webDriver.get(openuUrl);
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#user")).sendKeys("");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("1");
        webDriver.findElement(By.cssSelector("#submit")).click();
        String str1 = webDriver.switchTo().alert().getText();
        if(str1.equals("用户名或者密码不能为空!")) {
            System.out.println("测试通过1");
        }else {
            System.out.println("测试不通过1");
        }

        //输入用户名不为空密码为空,提示用户名或密码不能为空
        webDriver.switchTo().alert().accept();
        webDriver.findElement(By.cssSelector("#password")).clear();
        webDriver.findElement(By.cssSelector("#user")).sendKeys("1");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("");
        webDriver.findElement(By.cssSelector("#submit")).click();
        String str2 = webDriver.switchTo().alert().getText();
        if(str2.equals("用户名或者密码不能为空!")) {
            System.out.println("测试通过2");
        }else {
            System.out.println("测试不通过2");
        }

        //输入正确的用户名错误的密码登录失败
        webDriver.switchTo().alert().accept();
        webDriver.findElement(By.cssSelector("#user")).clear();
        webDriver.findElement(By.cssSelector("#user")).sendKeys(currentUsername);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(errorPassword);
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        String str3 = webDriver.switchTo().alert().getText();
        if(str3.equals("登录失败,密码或者用户名错误!")) {
            System.out.println("测试通过3");
        }else {
            System.out.println("测试不通过3");
        }

        //输入错误的用户名正确的密码登录失败
        webDriver.switchTo().alert().accept();
        webDriver.findElement(By.cssSelector("#user")).sendKeys(errorUsername);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(currentPassword);
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        String str4 = webDriver.switchTo().alert().getText();
        if(str4.equals("登录失败,密码或者用户名错误!")) {
            System.out.println("测试通过4");
        }else {
            System.out.println("测试不通过4");
        }

        //输入密码时密码要显示成小黑点
        webDriver.switchTo().alert().accept();
        String str5 = webDriver.findElement(By.cssSelector("#password")).getAttribute("type");
        if(str5.equals("password")) {
            System.out.println("测试通过5");
        }else {
            System.out.println("测试不通过5");
        }

        //在没有登录之前,无法访问登录页面之外的页面
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        String str6 = webDriver.findElement(By.cssSelector("body")).getText();
        Thread.sleep(1000);
        webDriver.get("http://127.0.0.1:8080/upload.html");
        String str7 = webDriver.findElement(By.cssSelector("body")).getText();
        Thread.sleep(1000);
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        Thread.sleep(1000);
        String str8 = webDriver.findElement(By.cssSelector("body")).getText();
        if(str6.equals("") && str7.equals("") && str8.equals("")) {
            System.out.println("测试通过6");
        }else {
            System.out.println("测试不通过6");
        }

        //输入正确的用户名正确的密码登录成功,跳转到歌曲列表页面
        webDriver.get(openuUrl);
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#user")).sendKeys(currentUsername);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(currentPassword);
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        String str9 = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        if(str9.equals("登录成功!") && webDriver.getCurrentUrl().equals("http://127.0.0.1:8080/musiclist.html")) {
            System.out.println("测试通过7");
        }else {
            System.out.println("测试不通过7");
        }

        //登录之后,可以随机访问登录页面之外的页面
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        String str10 = webDriver.findElement(By.cssSelector("body")).getText();
        Thread.sleep(1000);
        webDriver.get("http://127.0.0.1:8080/upload.html");
        String str11 = webDriver.findElement(By.cssSelector("body")).getText();
        Thread.sleep(1000);
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        Thread.sleep(1000);
        String str12 = webDriver.findElement(By.cssSelector("body")).getText();
        if(!str10.equals("") && !str11.equals("") && !str12.equals("")) {
            System.out.println("测试通过8");
        }else {
            System.out.println("测试不通过8");
        }
    }

测试结果:
在这里插入图片描述
第五条测试点“输入密码时密码要显示成小黑点”测试不通过。

3.2.2歌曲列表页面测试

测试点:
在这里插入图片描述
自动化脚本代码:

    @Order(2)
    @ParameterizedTest
    @CsvSource({"'http://127.0.0.1:8080/login.html', '火雷霆', '111'"})
    void musicList(String openuUrl, String currentUsername, String currentPassword) throws InterruptedException {
        //先上传“快乐行吗-副本”、“快乐星猫”、“四季予你”三首歌曲,供后面的测试用例使用
        uploadMusic();

        //点击上传歌曲按钮,跳转到上传页面
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("body > div.head > div > ul.top_list > li:nth-child(3) > a")).click();
        if(webDriver.getCurrentUrl().equals("http://127.0.0.1:8080/upload.html")) {
            System.out.println("测试通过1");
        }else {
            System.out.println("测试不通过1");
        }

        //点击我喜欢按钮,跳转到“我喜欢”页面
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("body > div.head > div > ul.top_list > li.spec > a")).click();
        if(webDriver.getCurrentUrl().equals("http://127.0.0.1:8080/lovemusiclist.html")) {
            System.out.println("测试通过2");
        }else {
            System.out.println("测试不通过2");
        }

        //没有选中歌曲,点击删除选中歌曲按钮,页面上的歌曲数量不会减少
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        List<WebElement> musicNUmber1 = webDriver.findElements(By.tagName("li"));
        webDriver.findElement(By.cssSelector("#delete")).click();
        Thread.sleep(1000);
        List<WebElement> musicNUmber2 = webDriver.findElements(By.tagName("li"));
        if(musicNUmber1.size() == musicNUmber2.size()) {
            System.out.println("测试通过3");
        }else {
            System.out.println("测试不通过3");
        }

        //在搜索框输入“乐”字然后点击搜索按钮,能搜索到“快乐星猫”和“快乐星猫 - 副本”两首歌
        List<WebElement> webElements1 = webDriver.findElements(By.tagName("li"));
        webDriver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("乐");
        webDriver.findElement(By.cssSelector("#submit1")).click();
        Thread.sleep(1000);
        List<WebElement> webElements2 = webDriver.findElements(By.tagName("li"));
        if(webElements2.size() + 1 == webElements1.size()) {
            System.out.println("测试通过4");
        }else {
            System.out.println("测试不通过4");
        }

        //在搜索框输入“乐”字然后点击搜索按钮,然后清除输入的“乐”字,再次点击搜索按钮,搜索出歌曲列表全部歌曲
        webDriver.findElement(By.cssSelector("#exampleInputName2")).clear();
        webDriver.findElement(By.cssSelector("#submit1")).click();
        Thread.sleep(1000);
        List<WebElement> webElements3 = webDriver.findElements(By.tagName("li"));
        if(webElements3.size() == webElements1.size()) {
            System.out.println("测试通过5");
        }else {
            System.out.println("测试不通过5");
        }

        //在搜索框输入“银”字点击搜索按钮,搜索到的歌曲为空
        webDriver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("银");
        webDriver.findElement(By.cssSelector("#submit1")).click();
        Thread.sleep(1000);
        List<WebElement> webElements4 = webDriver.findElements(By.tagName("li"));
        if(webElements4.size() == webElements1.size() - 3) {
            System.out.println("测试通过6");
        }else {
            System.out.println("测试不通过6");
        }

        //点击“四季予你”歌曲的播放按钮后可以播放“四季予你”歌曲
        webDriver.findElement(By.cssSelector("#exampleInputName2")).clear();
        webDriver.findElement(By.cssSelector("#submit1")).click();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(3) > button")).click();
        String musicSrc = webDriver.findElement(By.cssSelector("body > div:nth-child(3) > div > audio")).getAttribute("src");
        String src = musicSrc.substring(0, musicSrc.indexOf("="));
        if(src.equals("http://127.0.0.1:8080/music/get/?path")) {
            System.out.println("测试通过7");
        }else {
            System.out.println("测试不通过7");
        }

        //点击“四季予你”歌曲的喜欢按钮后可以将“四季予你”歌曲添加到“我喜欢”
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        Thread.sleep(1000);
        List<WebElement> webElement5 = webDriver.findElements(By.tagName("li"));
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(3) > a:nth-child(4) > button")).click();
        Thread.sleep(1000);
        String str1 = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        Thread.sleep(1000);
        List<WebElement> webElement6 = webDriver.findElements(By.tagName("li"));
        if(str1.equals("已添加到我喜欢") && (webElement6.size() == webElement5.size() + 1)) {
            System.out.println("测试通过8");
        }else {
            System.out.println("测试不通过8");
        }

        //已经将“四季予你”歌曲添加到“我喜欢”后,再次点击喜欢按钮会提示“歌曲以前已添加到我喜欢列表,不能再次添加!”
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(3) > a:nth-child(4) > button")).click();
        Thread.sleep(1000);
        String str2 = webDriver.switchTo().alert().getText();
        if(str2.equals("歌曲以前已添加到我喜欢列表,不能再次添加!")) {
            System.out.println("测试通过9");
        }else {
            System.out.println("测试不通过9");
        }



        //统计“我喜欢”列表的li标签的数量(相当于计算“我喜欢”列表有多少歌曲,虽然li标签有可能不是歌曲元素),供后面第11条测试用例使用
        webDriver.switchTo().alert().accept();
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        List<WebElement> webElement7 = webDriver.findElements(By.tagName("li"));

        //点击“四季予你”歌曲的删除按钮后可以删除“四季予你”歌曲
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        Thread.sleep(1000);
        //删除之前统计歌曲数量
        List<WebElement> webElement8 = webDriver.findElements(By.tagName("li"));
        //删除
        webDriver.findElement(By.cssSelector("#info > li:nth-child(3) > a:nth-child(5) > button")).click();
        Thread.sleep(1000);
        String str10 = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        删除之后统计歌曲数量
        List<WebElement> webElement9 = webDriver.findElements(By.tagName("li"));
        if(str10.equals("删除成功!,重新加载当前页面!") && (webElement9.size() + 1 == webElement8.size())) {
            System.out.println("测试通过10");
        }else {
            System.out.println("测试不通过10");
        }

        //点击“四季予你”歌曲的删除按钮后可以删除“四季予你”歌曲,同时也会将“四季予你”歌曲移除出“我喜欢”
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        Thread.sleep(1000);
        List<WebElement> webElement10 = webDriver.findElements(By.tagName("li"));
        if(webElement10.size() == webElement7.size() - 1) {
            System.out.println("测试通过11");
        }else {
            System.out.println("测试不通过11");
        }



        //先将快乐星猫和快乐星猫-副本两首歌曲加入“我喜欢”,并统计“我喜欢”列表的li标签的数量(相当于计算“我喜欢”列表有多少歌曲,
        //虽然li标签有可能不是歌曲元素),供后面第13条测试用例使用
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(1) > a:nth-child(4) > button")).click();
        Thread.sleep(1000);
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(2) > a:nth-child(4) > button")).click();
        Thread.sleep(1000);
        webDriver.switchTo().alert().accept();
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        Thread.sleep(1000);
        List<WebElement> webElement11 = webDriver.findElements(By.tagName("li"));

        //选中“快乐星猫”和“快乐星猫 - 副本”两首歌曲后,点击删除选中歌曲按钮,可以批量删除这两首歌曲
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        Thread.sleep(1000);
        //批量删除之前统计歌曲列表数量
        List<WebElement> webElement12 = webDriver.findElements(By.tagName("li"));
        //批量删除
        List<WebElement> inputs = webDriver.findElements(By.cssSelector("input"));
        for(int i = 0; i < inputs.size(); i++) {
            if(inputs.get(i).getAttribute("type").equals("checkbox")) {
                inputs.get(i).click();
            }
        }
        webDriver.findElement(By.cssSelector("#delete")).click();
        Thread.sleep(1000);
        String str11 = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        //批量删除之后统计歌曲列表数量
        List<WebElement> webElement13 = webDriver.findElements(By.tagName("li"));
        if(str11.equals("删除成功!") && (webElement13.size() == webElement12.size() - 2)) {
            System.out.println("测试通过12");
        }else {
            System.out.println("测试不通过12");
        }

        //选中“快乐星猫”和“快乐星猫 - 副本”两首歌曲后,点击删除选中歌曲按钮,可以批量删除这两首歌曲,同时将这两首歌曲移出“我喜欢”
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        Thread.sleep(1000);
        List<WebElement> webElement14 = webDriver.findElements(By.tagName("li"));
        if(webElement14.size() == webElement11.size() - 2) {
            System.out.println("测试通过13");
        }else {
            System.out.println("测试不通过13");
        }

        //点击登录按钮会回到登录页面
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("body > div.head > div > div.head_right > a")).click();
        Thread.sleep(1000);
        if(webDriver.getCurrentUrl().equals(openuUrl)) {
            System.out.println("测试通过14");
        }else {
            System.out.println("测试通过14");
        }
    }

测试结果:
在这里插入图片描述

3.2.3“我喜欢”页面测试

测试点:
在这里插入图片描述
自动化脚本代码:

    @Order(3)
    @Test
    void loveMusicList() throws InterruptedException {
        //因为第三个测试方法将歌曲列表中的歌曲已经全部删除了,所以要重新上传“快乐行吗-副本”、“快乐星猫”、“四季予你”三首歌曲和将
        //这三首歌曲添加喜欢列表,供后面的测试用例使用
        uploadMusic();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(1) > a:nth-child(4) > button")).click();
        Thread.sleep(1000);
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(2) > a:nth-child(4) > button")).click();
        Thread.sleep(1000);
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(3) > a:nth-child(4) > button")).click();
        Thread.sleep(1000);
        webDriver.switchTo().alert().accept();

        //点击“快乐星猫”歌曲的播放按钮后可以播放“快乐星猫”歌曲
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(2) > a:nth-child(3) > button")).click();
        String musicSrc = webDriver.findElement(By.cssSelector("body > div:nth-child(3) > div > audio")).getAttribute("src");
        String src = musicSrc.substring(0, musicSrc.indexOf("="));
        if(src.equals("http://127.0.0.1:8080/music/get/?path")) {
            System.out.println("测试通过1");
        }else {
            System.out.println("测试不通过1");
        }

        //在搜索框输入“乐”字然后点击搜索按钮,能搜索到“快乐星猫”和“快乐星猫 - 副本”两首歌
        List<WebElement> webElements1 = webDriver.findElements(By.tagName("li"));
        webDriver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("乐");
        webDriver.findElement(By.cssSelector("#submit1")).click();
        Thread.sleep(1000);
        List<WebElement> webElements2 = webDriver.findElements(By.tagName("li"));
        if(webElements2.size() + 1 == webElements1.size()) {
            System.out.println("测试通过2");
        }else {
            System.out.println("测试不通过2");
        }

        //在搜索框输入“乐”字然后点击搜索按钮,然后清除输入的“乐”字,再次点击搜索按钮,搜索出“我喜欢”列表全部歌曲
        webDriver.findElement(By.cssSelector("#exampleInputName2")).clear();
        webDriver.findElement(By.cssSelector("#submit1")).click();
        Thread.sleep(1000);
        List<WebElement> webElements3 = webDriver.findElements(By.tagName("li"));
        if(webElements3.size() == webElements1.size()) {
            System.out.println("测试通过3");
        }else {
            System.out.println("测试不通过3");
        }

        //在搜索框输入“银”字点击搜索按钮,搜索到的歌曲为空
        webDriver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("银");
        webDriver.findElement(By.cssSelector("#submit1")).click();
        Thread.sleep(1000);
        List<WebElement> webElements4 = webDriver.findElements(By.tagName("li"));
        if(webElements4.size() == webElements1.size() - 3) {
            System.out.println("测试通过4");
        }else {
            System.out.println("测试不通过4");
        }

        //点击“快乐星猫”歌曲的移除按钮后可以将“快乐星猫”歌曲移出“我喜欢”
        webDriver.findElement(By.cssSelector("#exampleInputName2")).clear();
        webDriver.findElement(By.cssSelector("#submit1")).click();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(2) > a:nth-child(4) > button")).click();
        Thread.sleep(1000);
        String str1 = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        List<WebElement> webElements5 = webDriver.findElements(By.tagName("li"));
        if(str1.equals("移除成功!,重新加载当前页面!") && webElements5.size() == webElements1.size() - 1) {
            System.out.println("测试通过5");
        }else {
            System.out.println("测试不通过5");
        }

        //点击“快乐星猫”歌曲的移除按钮后可以将“快乐星猫”歌曲移出“我喜欢”,同时“快乐星猫”歌曲依然在歌曲列表
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        Thread.sleep(1000);
        String str2 = webDriver.findElement(By.cssSelector("#info > li:nth-child(2) > div.txt > h3")).getText();
        if(str2.equals("快乐星猫")) {
            System.out.println("测试通过6");
        }else {
            System.out.println("测试不通过6");
        }


        //开一个新的窗口,再换回原来的窗口在原来的窗口移除“快乐星猫-副本”歌曲,再换到新开的窗口,这时新开的窗口应该看不到“快乐星猫-副本”歌曲
        webDriver.get("http://127.0.0.1:8080/lovemusicList.html");
        ((JavascriptExecutor)webDriver).executeScript("window.open('http://127.0.0.1:8080/lovemusicList.html')");
        Thread.sleep(1000);

        Set<String> allHandle = webDriver.getWindowHandles();
        String target = "";
        int num = 0;
        for (String temp : allHandle) {
            target = temp;
            if(++num == 1) {
                break;
            }
        }
        webDriver.switchTo().window(target);
        webDriver.findElement(By.cssSelector("#info > li:nth-child(1) > a:nth-child(4) > button")).click();
        Thread.sleep(1000);
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        List<WebElement> webElements6 = webDriver.findElements(By.tagName("li"));

        num = 0;
        for (String temp : allHandle) {
            target = temp;
            if(++num == 2) {
                break;
            }
        }
        webDriver.switchTo().window(target);
        Thread.sleep(1000);
        List<WebElement> webElements7 = webDriver.findElements(By.tagName("li"));
        if(webElements7.size() == webElements6.size()) {
            System.out.println("测试通过7");
        }else {
            System.out.println("测试不通过7");
        }


        //点击返回按钮可以回到歌曲列表页面
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        webDriver.findElement(By.cssSelector("body > div.head > div > ul.top_list > li > a")).click();
        if(webDriver.getCurrentUrl().equals("http://127.0.0.1:8080/musiclist.html")) {
            System.out.println("测试通过8");
        }else {
            System.out.println("测试不通过8");
        }

        //点击登录按钮会回到登录页面
        webDriver.get("http://127.0.0.1:8080/lovemusiclist.html");
        webDriver.findElement(By.cssSelector("body > div.head > div > div.head_right > a")).click();
        if(webDriver.getCurrentUrl().equals("http://127.0.0.1:8080/login.html")) {
            System.out.println("测试通过9");
        }else {
            System.out.println("测试不通过9");
        }
    }

测试结果:
在这里插入图片描述
第七条测试点“开一个新的窗口,在这个窗口移除“快乐星猫-副本”歌曲,然后再回到原来的窗口,这时原来的窗口应该看不到“快乐星猫-副本”歌曲”测试不通过。

3.2.4上传页面测试

测试点:
在这里插入图片描述
自动化脚本代码:

@Order(4)
    @Test
    void upload() throws InterruptedException {
        //因为第三个测试方法已经上传了“快乐行吗-副本”、“快乐星猫”、“四季予你”三首歌曲,所以要先将这些歌曲删掉,供后面的测试用例使用
        webDriver.get("http://127.0.0.1:8080/musiclist.html");
        Thread.sleep(1000);
        List<WebElement> inputs = webDriver.findElements(By.cssSelector("input"));
        for(int i = 0; i < inputs.size(); i++) {
            if(inputs.get(i).getAttribute("type").equals("checkbox")) {
                inputs.get(i).click();
            }
        }
        webDriver.findElement(By.cssSelector("#delete")).click();
        Thread.sleep(1000);
        webDriver.switchTo().alert().accept();

        //没有选择要上传的歌曲文件没有填歌手名时点击上传按钮,显示“您还未填写歌手名”
        webDriver.get("http://127.0.0.1:8080/upload.html");
        webDriver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();
        String str1 = webDriver.findElement(By.tagName("pre")).getText();
        if(str1.equals("{\"status\":-1,\"message\":\"您还未填写歌手名\",\"data\":false}")) {
            System.out.println("测试通过1");
        }else {
            System.out.println("测试不通过1");
        }

        //没有选择要上传的歌曲文件填写了歌手名时点击上传按钮,显示“您还未选择要上传的歌曲文件”
        webDriver.get("http://127.0.0.1:8080/upload.html");
        webDriver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("3");
        webDriver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();
        String str2 = webDriver.findElement(By.tagName("pre")).getText();
        if(str2.equals("{\"status\":-1,\"message\":\"您还未选择要上传的歌曲文件\",\"data\":false}")) {
            System.out.println("测试通过2");
        }else {
            System.out.println("测试不通过2");
        }

        //选择了上传的文件歌曲没有填写歌手名时点击上传按钮,显示“您还未填写歌手名”
        webDriver.get("http://127.0.0.1:8080/upload.html");
        webDriver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)")).sendKeys("D:\\musicsource\\快乐星猫 - 副本.mp3");
        webDriver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();
        String str3 = webDriver.findElement(By.tagName("pre")).getText();
        if(str3.equals("{\"status\":-1,\"message\":\"您还未填写歌手名\",\"data\":false}")) {
            System.out.println("测试通过3");
        }else {
            System.out.println("测试不通过3");
        }

        //先上传快乐星猫-副本歌曲,供第四条测试用例使用
        webDriver.get("http://127.0.0.1:8080/upload.html");
        webDriver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)")).sendKeys("D:\\musicsource\\快乐星猫 - 副本.mp3");
        webDriver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("3");
        webDriver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();

        //选择了已经上传过的歌曲文件填写了歌手名时点击上传按钮,显示“该歌曲已经上传过,不能继续上传!”
        webDriver.get("http://127.0.0.1:8080/upload.html");
        webDriver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)")).sendKeys("D:\\musicsource\\快乐星猫 - 副本.mp3");
        webDriver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("3");
        webDriver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();
        String str4 = webDriver.findElement(By.tagName("pre")).getText();
        if(str4.equals("{\"status\":-1,\"message\":\"该歌曲已经上传过,不能继续上传!\",\"data\":false}")) {
            System.out.println("测试通过4");
        }else {
            System.out.println("测试不通过4");
        }

        //选择了没有上传过的歌曲文件填写了歌手名时点击上传按钮,上传成功,跳转到歌曲列表页面
        webDriver.get("http://127.0.0.1:8080/upload.html");
        webDriver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)")).sendKeys("D:\\musicsource\\快乐星猫.mp3");
        webDriver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("3");
        webDriver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();
        String str5 = webDriver.getCurrentUrl();
        if(str5.equals("http://127.0.0.1:8080/musiclist.html")) {
            System.out.println("测试通过5");
        }else {
            System.out.println("测试不通过5");
        }

        //选择了非歌曲文件(非mp3文件)填写了歌手名时点击上传按钮,上传失败
        webDriver.get("http://127.0.0.1:8080/upload.html");
        webDriver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)")).sendKeys("D:\\照片.jpg");
        webDriver.findElement(By.cssSelector("body > form > label > input[type=text]")).sendKeys("3");
        webDriver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();
        String str6 = webDriver.getCurrentUrl();
        if(!str6.equals("http://127.0.0.1:8080/musiclist.html")) {
            System.out.println("测试通过6");
        }else {
            System.out.println("测试不通过6");
        }
    }

测试结果:
在这里插入图片描述
第六条测试点“选择了非歌曲文件(非mp3文件)填写了歌手名时点击上传按钮,上传失败”测试不通过。

四、测试结论与建议

该网站存在一些缺陷,但这些缺陷不影响基本功能的正常使用。
以下是针对缺陷给出的一些改进建议:
1、缺陷:在登录框输入密码时密码会显示成明文。建议:我们需要把密码显示为密文。
2、缺陷:用户进行操作后,前端页面无法进行实时更新。建议:我们需要把前端页面改为具有实时更新能力的页面。
3、缺陷:非mp3文件也可以上传,而非mp3文件是不可以播放的,这进一步会引发一系列的bug。建议:非mp3文件禁止上传。
4、缺陷:没有注册、退出登录、注销账号功能。建议:添加注册、退出登录、注销账号功能。
5、缺陷:登录框的登录按钮、搜索歌曲搜索框的搜索按钮没有键盘上的Enter事件。建议:给登录框的登录按钮、搜索歌曲搜索框的搜索按钮添加键盘上的Enter事件。

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

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

相关文章

零失误微信支付商家转账到零钱功能开通教程

商家转账到零钱是什么&#xff1f; 使用商家转账到零钱这个功能&#xff0c;可以让商户同时向多个用户的零钱转账。商户可以使用这个功能用于费用报销、员工福利发放、合作伙伴货款或分销返佣等场景&#xff0c;提高效率。 商家转账到零钱的使用场景有哪些&#xff1f; 商家…

都江堰操作系统系统架构图

都江堰操作系统设计思想源于中国传统的“天人合一&#xff0c;道法自然”哲学思想&#xff0c;内核调度系统采用事件调度&#xff0c;全球首创&#xff0c;突破单机桎梏&#xff0c;实现异构网络调度&#xff0c;开拓新赛道&#xff0c;实现换道超车。“有事就动&#xff0c;没…

Vue.js前端开发零基础教学(四)

学习目标&#xff1a; 熟悉选项式API和组合式API&#xff0c;能够说出选项式API和组合式API的区别 掌握注册组件的方法&#xff0c;能够运用全局注册或者局部注册的方式完成组件的注册 掌握父组件向子组件传递数据的方法&#xff0c;能够使用props实现数据传递等等 前言 在学习…

Linux 学习之路 -- 进程篇 -- 背景介绍

目录 1、冯诺依曼体系架构 2.操作系统 1、冯诺依曼体系架构 再开始学习进程之前我们要先了解一下计算机的体系结构&#xff0c;这里我们以最经典的冯诺依曼体系结构为例&#xff0c;简单介绍一下一下计算机的体系结构&#xff0c;方便我们对进程的理解。 这里的中央处理器就是…

Multi-task Lung Nodule Detection in Chest Radiographs with a Dual Head Network

全局头增强真的有用吗&#xff1f; 辅助信息 作者未提供代码

209基于matlab的无人机路径规划

基于matlab的无人机路径规划&#xff0c;包括2D路径和3D路径&#xff0c;三种优化算法&#xff0c;分别是蝙蝠算法&#xff08;BA&#xff09;、蝙蝠算法融合差分进化算法(DEBA)、结合人工势场方法的改进混沌蝙蝠算法(CPFIBA)。输出距离迭代曲线和规划的路径。程序已调通&#…

Unity TrailRenderer的基本了解

在Unity中&#xff0c;TrailRenderer组件用于在对象移动时创建轨迹效果。通常用于增强游戏中的动态物体&#xff0c;比如子弹、飞行道具或者角色移动时的拖尾效果。 下面来了解下它的基本信息。 1、创建 法1&#xff1a;通过代码创建 using UnityEngine;public class Trail…

数码管时钟--LABVIEW编程

一、程序的前面板 1.获取系统时钟&#xff0c;年月日&#xff0c;时分秒&#xff0c;用14个数码管显示。 2.闹钟设定小时和分钟。 二、程序的后面板 三、程序运行图 四、程序源码 源程序可以在百度网盘自行下载&#xff0c;地址链接见下方。 链接&#xff1a;https://pan.b…

006 高并发内存池_PageCache设计

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;高并发内存池 &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言文章重点一、回顾PageCache页缓存结构二、PageCache结构设计三、完善申请内存函数小结 前言 本文将…

图的遍历试题

一、单项选择题 01.下列关于广度优先算法的说法中&#xff0c;正确的是( ). Ⅰ.当各边的权值相等时&#xff0c;广度优先算法可以解决单源最短路径问题 Ⅱ.当各边的权值不等时&#xff0c;广度优先算法可用来解决单源最短路径问题 Ⅲ.广度优先遍历算法类似于树中的后序遍历算法…

第十五届蓝桥杯模拟考试II_物联网设计

这次写的还是比较顺利的3h完成&#xff0c;一个模块一个模块检查&#xff0c;检查无误后再组装&#xff0c;组装完成后再测试&#xff0c;这样一步一个脚印&#xff0c;将整个模块搭建好是最稳妥的&#xff0c;很少出现一个积木单个没有问题组装之后和体系中的其他积木产生奇妙…

LongAdder 和 AtomicLong

有幸看到一篇关于这个讲解 2个类的讲解&#xff0c;自己也归纳总结一下。 一、解析 看源码底层会发现实现机制不一样&#xff0c;当然这个也是必须的 LongAdder 点进去之后会发现&#xff0c;CAS 它是一个CAS的实现类。至于Cell类JVM提供的内置函数 官方说法是&#xff1a;…

Feign远程调用的基本流程通俗易懂

1. OpenFeign的源码解析 关于OpenFeign的源码解析这位博主写的非常详细&#xff0c;可先阅读该博客【OpenFeign调用服务的核心原理解析】&#xff0c;本文对其内容做了概括整理&#xff0c;较于源码解析 通俗易懂。 2. Feign远程调用的基本流程图解 Feign远程调用&#xff0…

Linux中数据呈现输入输出重定向

1 理解输入输出 目前为止&#xff0c;你已经知道了两种脚本输出的方法&#xff1a; 在显示器屏幕上显示输出 将输出重定向到文件中 1.1 标准文件描述符 Linux系统将每个对象当作文件处理。这包括输入和输出进程。Linux用文件描述符(file descriptor)来标识每个文件对象。文…

【CANN训练营笔记】Atlas 200I DK A2体验手写数字识别模型训练推理

环境介绍 开发板&#xff1a;Huawei Atals 200I DK A2 内存&#xff1a;4G NPU&#xff1a;Ascend 310B4 CANN&#xff1a;7.0 准备环境 下载编译好的torch_npu wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/torch_npu-2.1.0rc1-cp39-cp39-linux_aarch…

sql之每日五题day01--多表联查/聚合函数

sql错题记录 含有聚合函数的不能用where升序排列order byleft join多表联查inner join不返回null三表联查 含有聚合函数的不能用where SQL19 分组过滤练习题 题目&#xff1a;现在运营想查看每个学校用户的平均发贴和回帖情况&#xff0c;寻找低活跃度学校进行重点运营&#x…

算法复习:链表

链表定义 struct ListNode { int val;ListNode *next;ListNode(int x) : val(x), next(nullptr) {} }; 链表的遍历&#xff1a;ListNode phead; while(p!null) pp.next; 找到链表的尾结点&#xff1a;phead; while(p.next!null)pp.next; 链表节点的个数&#xff1a; phead…

windows上配置Redis主从加哨兵模式实现缓存高可用

一、哨兵模式 哨兵&#xff08;sentinel&#xff09;是Redis的高可用性(High Availability)的解决方案&#xff1a;由一个或多个sentinel实例组成sentinel集群可以监视一个或多个主服务器和多个从服务器。当主服务器进入下线状态时&#xff0c;sentinel可以将该主服务器下的某…

基于PHP的新闻管理系统(用户发布版)

有需要请加文章底部Q哦 可远程调试 基于PHP的新闻管理系统(用户发布版) 一 介绍 此新闻管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。本新闻管理系统采用用户发布新闻&#xff0c;管理员审核后展示模式。 技术栈&am…

编曲知识15:重复段落编写 尾奏编写 家庭工作室搭建 硬件设备使用常识

15 重复段落编写 尾奏编写 家庭工作室搭建 硬件设备使用常识小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_6602a586e4b0694cc051476b?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 重复段落设计 第二段落指代间奏过后的段落 第二…