星云曲库测试报告

文章目录

  • 一、项目介绍
    • 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事件。

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

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

相关文章

Unity TrailRenderer的基本了解

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

css3之3D转换transform

css3之3D转换 一.特点二.坐标系三.3D移动&#xff08;translate3d)1.概念2.透视&#xff08;perpective)(近大远小&#xff09;&#xff08;写在父盒子上&#xff09; 四.3D旋转&#xff08;rotate3d)1.概念2.左手准则3.呈现&#xff08;transfrom-style)&#xff08;写父级盒子…

精品PPT-2023年无人驾驶汽车车联网网络安全方案

以下是部分PPT内容&#xff0c;请您参阅。如需下载完整PPTX文件&#xff0c;请前往星球获取&#xff1a; 无人驾驶安全架构是一个复杂的系统&#xff0c;它涉及到多个关键组件和层次&#xff0c;以确保无人驾驶车辆在各种情况下都能安全、可靠地运行。以下是一些主要的无人驾驶…

并查集

本文用于个人算法竞赛学习&#xff0c;仅供参考 目录 一.什么是并查集 二.并查集实现 三.路径优化 四.时间复杂度 五.并查集路径压缩 模板 五.题目 一.什么是并查集 并查集&#xff08;Disjoint Set&#xff09;是一种数据结构&#xff0c;用于处理一系列不相交的集合的合…

javaIO

file类 一个File类的对象可以表示一个具体的文件或目录 mkdir 创建单级文件夹 mkdirs 创建多级文件夹 delete 删除一个文件夹时&#xff0c;文件夹里面必须是空的 listfiles 将文件夹的子集放到一个file类型的数组中 输入及输出的概念 输入input 输出output 把jav…

pyinstaller打包多线程pyqt5程序后,报错,反复弹窗等问题

报错1&#xff1a; Traceback (most recent call last): File “MPL.py”, line 502, in File “Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_multiprocessing.py”, line 45, in _freeze_support ValueError: not enough values to unpack (expected 2, got 1) 报…

STM32学习笔记(10_3)- 软件I2C读写MPU6050

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期开…

分布式之分布式事务详解

分布式事务与实战运用 什么是分布式事务&#xff1f; 业务场景&#xff1a;用户A转账100元给用户B&#xff0c;这个业务比较简单&#xff0c;具体的步骤&#xff1a; 1、用户A的账户先扣除100元 2、再把用户B的账户加100元 如果在同一个数据库中进行&#xff0c;事务可以保证…

C语言之Linux内核回调函数写法(八十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

论文阅读,Accelerating the Lattice Boltzmann Method(五)

目录 一、Article:文献出处&#xff08;方便再次搜索&#xff09; &#xff08;1&#xff09;作者 &#xff08;2&#xff09;文献题目 &#xff08;3&#xff09;文献时间 &#xff08;4&#xff09;引用 二、Data:文献数据&#xff08;总结归纳&#xff0c;方便理解&am…

Nginx的反向代理

Nginx的反向代理 location ^~ /aaa {proxy_pass http://192.168.15.78/; } 1. 跨域 2.Nginx 代理服务器缓存 3.Nginx 负载均衡 4. 动静分离 Nginx的跨域 跨源资源共享 (CORS) 是一种机制&#xff0c;它使用额外的 HTTP 标头让用户代理获得访问来自不同来域的服务器上选定资…

LongAdder 和 AtomicLong

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

Python版【植物大战僵尸 +源码】

文章目录 写在前面&#xff1a;功能实现环境要求怎么玩个性化定义项目演示&#xff1a;源码分享Map地图:Menubar.py主菜单 主函数&#xff1a;项目开源地址 写在前面&#xff1a; 今天给大家推荐一个Gtihub开源项目&#xff1a;PythonPlantsVsZombies&#xff0c;翻译成中就是…

小程序开发调试指南

调试指南 一、Vconsole 一些线上问题需要在真机中进行调试或日志输出&#xff0c;为方便查看前端日志的输出&#xff0c;App 端提供了调试模式, 打开调试模式后面板界面中会显示 vConsole 按钮&#xff0c;点击后可打开手机端 vConsole界面查看日志输出。 1.如何开启 点击小…

JumpServer 堡垒主机

JumpServer 堡垒机帮助企业以更安全的方式管控和登陆各种类型的资产 SSH&#xff1a;Linux/Unix/网络设备等Windows&#xff1a;Web方式连接/原生RDP连接数据库&#xff1a;MySQL、Oracle、SQLServer、PostgreSQL等Kubernetes&#xff1a;连接到K8s集群中的PodsWeb站点&#x…

复现黄金票据

一、搭建环境 搭建域环境可以点击这个查看步骤 在这里面monowall的配置查看 二、实验步骤 拿到域名 拿到SID 使用mimikatz拿到krbtgt用户的哈希 删除票据 也可以使用mimikatz.exe删除票据&#xff0c;命令是kerberos::purge 伪造票据 拿到域控 伪造成功

物联网实战--入门篇之(六)嵌入式-WIFI驱动(ESP8266)

目录 一、WIFI简介 二、基础网络知识 三、思路讲解 四、代码分析 4.1 状态机制 4.2 客户端连接 4.3 应用数据接收处理 4.4 数据发送 4.5 主函数调用 4.6 网络连接ID分配 五、总结 一、WIFI简介 WIFI在我们生活中太常见了&#xff0c;手机电脑都可以用WiFi连接路由器进行上…

MySQL核心命令详解与实战,一文掌握MySQL使用

文章目录 文章简介演示库表创建数据库表选择数据库删除数据库创建表删除表向表中插入数据更新数据删除数据查询数据WHERE 操作符聚合函数LIKE 子句分组 GROUP BY HAVINGORDER BY(排序) 语句LIMIT 操作符 分页查询多表查询-联合查询 UNION 操作符多表查询-连接的使用-JOIN语句编…

从0到1手把手撸码搭建后台管理系统

从0到1手把手撸码搭建后台管理系统 第一章:系统介绍开发目的与过程 要使用 Vue3 搭建后台&#xff0c;你可以按照以下步骤进行&#xff1a; 安装 Vue3&#xff1a;使用包管理工具&#xff08;如 npm 或 yarn&#xff09;安装 Vue3。选择构建工具&#xff1a;选择一个适合的构…

Spring之循环依赖

什么是循环依赖? 依赖的相互引用,如下列的这种形式 Component public class A {Autowiredprivate B b;}Component public class B {Autowiredprivate A a; } Spring是如何解决循环依赖的 Spring是通过三级缓存来解决循环依赖 singletonObjects : 单例bean,已经实例化,完成…