小项目“谈笑风生”测试报告

文章目录

  • 一、项目介绍
    • 1.1项目背景
    • 1.2功能介绍
  • 二、测试环境
  • 三、测试执行过程
    • 3.1功能测试
      • 3.1.1登录页面测试
      • 3.1.2注册页面测试
      • 3.1.3主页面测试
    • 3.2界面自动化测试
      • 3.2.1登录模块测试
      • 3.2.2注册模块测试
      • 3.2.3展示各种信息模块测试
      • 3.2.34聊天消息传送模块测试
  • 四、测试结论与建议

一、项目介绍

1.1项目背景

随着互联网的迅速普及和广泛应用,人们的沟通方式开始多元化,即时通讯软件的出现让人们之间的交流变得更加灵活和方便。为了满足人们交流多元化的需求,这里模仿QQ社交软件,开发了一个网页聊天程序。

1.2功能介绍

登录、注册、展示好友列表、展示消息列表、展示聊天记录、与好友进行实时聊天

二、测试环境

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

三、测试执行过程

3.1功能测试

3.1.1登录页面测试

测试点:
在这里插入图片描述
1、(1)输入用户名为空密码为空,提示用户名或密码不能为空
(2)输入用户名为空密码不为空,提示用户名或密码不能为空
(3)输入用户名不为空密码为空,提示用户名或密码不能为空
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、(1)输入正确的用户名错误的密码登录失败
(2)输入错误的用户名正确的密码登录失败
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
3、(1)输入密码时密码要显示成小黑点
测试结果显示功能正常:
在这里插入图片描述
4、(1)在没有登录之前,访问登录页面和注册页面之外的页面,访问后页面会自动跳转回登录页面
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
5、(1)输入正确的用户名正确的密码登录成功,跳转到主页面
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
6、(1)登录成功后,访问登录页面和注册页面之外的页面,访问后页面不会自动跳转回登录页面
测试结果显示功能正常:
在这里插入图片描述
7、(1)登录成功后,重启服务器,访问登录页面和注册页面之外的页面,访问后页面不会自动跳转回登录页面
测试结果显示功能正常:
在这里插入图片描述
8、(1)点击“注册一个新账号”,跳转到注册页面
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述

3.1.2注册页面测试

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

1、(1)输入用户名为空密码为空,提示用户名或密码不能为空
(2)输入用户名为空密码不为空,提示用户名或密码不能为空
(3)输入用户名不为空密码为空,提示用户名或密码不能为空
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、(1)输入密码时密码要显示成小黑点
测试结果显示功能正常:
在这里插入图片描述
3、(1)输入用户名“神威”输入密码“111”,提示注册成功
测试结果显示功能正常:
在这里插入图片描述
4、(1)输入用户名“神威”输入密码“111”,提示注册失败
测试结果显示功能异常,因为之前已经注册过用户名为“神威”密码为“111”这个账户了,此时应该注册失败才对,但现实结果是注册成功了,这说明可以注册多个用户名和密码相同账户:
在这里插入图片描述
5、(1)点击“点此登录”,跳转到登录页面
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述

3.1.3主页面测试

测试点:
在这里插入图片描述
1、点击好友图标,好友图标变成蓝色会话图标变成白色;点击会话图标,会话图标变成蓝色好友图标变成白色
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述

2、(1)点击好友图标,页面左边显示好友列表,好友列表中的每一项要包含好友的名字
(2)好友列表中的好友过多时,可以操作滚动条对好友列表进行上下滚动
测试结果显示功能正常:
在这里插入图片描述
3、(1)点击会话图标,页面左边显示会话列表,会话列表中的每一项要包含会话主题和会话里的最后一条消息(即预览消息)
(2)会话列表中的会话过多时,可以操作滚动条对会话列表进行上下滚动
(3)页面左下角显示已登录用户的名称
测试结果显示功能正常:
在这里插入图片描述
4、(1)点击好友列表里的已经在会话列表中存在会话记录的好友,页面左边会从好友列表跳转到会话列表,然后相应的会话会置顶且被设置为高亮,会话列表的滑轮会滑倒最上方
(2)点击好友列表里的没有在会话列表中存在会话记录的好友,页面左边会从好友列表跳转到会话列表,然后相应的会话会被创建出来且置顶、高亮,会话列表的滑轮会滑倒最上方
(1)测试结果显示功能异常,会话列表的滑轮没有滑倒最上方:
在这里插入图片描述
(2)测试结果显示功能异常,会话列表的滑轮没有滑倒最上方:
在这里插入图片描述
5、(1)点击会话列表中的某一个会话,某一个会话会被设置为高亮
(2)点击会话列表中的某一个会话,某一个会话的会话主题会显示到页面右侧消息展示区域的左上方
(3)点击会话列表中的某一项,某一个会话的历史消息会显示到页面右侧消息展示区域且滚动条自动滚动到最下方
(4)如果页面右侧消息展示区域中的历史消息过多,可以操作滚动条对历史消息进行上下滚动
(5)页面右侧消息展示区域中,如果消息是所登录的用户发的,则消息气泡为蓝色且靠右;如果消息是非所登录的用户发的,则消息气泡为白色且靠左
(6)页面右侧消息展示区域中,每个消息气泡上方会显示发送该消息气泡用户的用户名
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
6、(1)登录用户为火雷霆,点击会话列表中标题为急速锋的会话,在页面右侧消息展示区域下方的输入框中输入信息然后发送,消息发送成功;相应会话会置顶、高亮、预览消息为刚才火雷霆发的消息,会话列表滚动条滚动到最上方
(2)用浏览器无痕模式重新打开一个窗口,再登录急速锋用户,会话列表中标题为火雷霆的会话的最后一条消息(即预览消息)变为了刚才火雷霆发的消息,点击这个会话,可以在右侧消息展示区域最下方看到刚才火雷霆发的消息
(1)测试结果显示功能异常,火雷霆用户的会话列表的滚动条没有滚动到最上方:
在这里插入图片描述
(2)的测试结果显示功能正常:
在这里插入图片描述
7、(1)刷新火雷霆和急速锋用户的页面,急速锋给火雷霆发消息,火雷霆能收到消息,火雷霆用户的相应会话会置顶、预览消息为刚才急速锋发的消息,会话列表滚动条滚动到最上方;同时急速锋用户的相应会话置顶、高亮、预览消息为刚才急速锋发的消息,会话列表滚动条滚动到最上方
(2)刷新火雷霆和急速锋用户的页面,火雷霆用户会话列表中标题为急速锋的会话的最后一条消息(即预览消息)变成了刚才急速锋发的消息,点击这个会话,可以在右侧消息展示区域最下方看到刚才急速锋发的消息
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8、(1)刷新火雷霆和急速锋用户的页面,火雷霆给急速锋发消息,急速锋能收到消息,急速锋用户的相应会话会置顶、预览消息为刚才火雷霆发的消息,会话列表滚动条滚动到最上方;同时火雷霆用户的相应会话会置顶、高亮、预览消息为刚才火雷霆发的消息,会话列表滚动条滚动到最上方
(2)刷新火雷霆和急速锋用户的页面,急速锋用户会话列表中标题为火雷霆的会话的最后一条消息(即预览消息)变成了刚才火雷霆发的消息,点击这个会话,可以在右侧消息展示区域最下方看到刚才火雷霆发的消息
(1)测试结果显示功能异常,火雷霆用户的会话列表的滚动条没有滚动到最上方:
在这里插入图片描述
在这里插入图片描述
(2)测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
9、(1)刷新火雷霆和急速锋用户的页面,急速锋给火雷霆发送一条消息,火雷霆给急速锋发送一条消息,消息均发送成功
(2)刷新火雷霆和急速锋用户的页面,急速锋用户会话列表中标题为火雷霆的会话的最后一条消息(即预览消息)变成了刚才最后发的一条消息,点击这个会话,可以在右侧消息展示区域看到刚才火雷霆和急速锋相互发的消息;火雷霆用户会话列表中标题为急速锋的会话的最后一条消息(即预览消息)变成了刚才最后发的一条消息,点击这个会话,可以在右侧消息展示区域看到刚才火雷霆和急速锋相互发的消息
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
10、(1)用非无痕模式重新打开一个窗口,登录火雷霆用户,提示“您在其它设备已经登录过了,请退出其它设备的登录后再在此设备进行重新登录”
(2)用无痕模式重新打开一个窗口,登录火雷霆用户,提示“您在其它设备已经登录过了,请退出其它设备的登录后再在此设备进行重新登录”
测试结果显示功能正常:
在这里插入图片描述
在这里插入图片描述

11、(1)当发送的消息过长时,右侧的消息展示区域还能正常显示,消息展示区域的各个功能和原来保持一样
(2)缩小页面,页面的整体布局不会改变,页面各区域的各个功能和原来保持一样
(3)放大页面,页面的整体布局不会改变,页面各区域的各个功能和原来保持一样
(1)测试结果显示功能异常,输入过长的消息然后发送,符号或数字文本在气泡中不能正常显示,而文字文本却能在气泡中正常显示;滑动鼠标滑轮将消息展示区域的消息上下滑动时,在消息展示区域中的消息有时会上下滑动,有时又会左右滑动,有时在消息展示区域的下方会出现左右滑动的滚动条,有时又不会出现左右滚动的滚动条:
在这里插入图片描述
在这里插入图片描述

(2)的测试结果显示功能异常,缩小页面后页面布局会变形:
在这里插入图片描述
(3)的测试结果显示功能异常,放大页面后有时右侧会出现会话列表、有时又不会出现会话列表:
在这里插入图片描述
在这里插入图片描述

3.2界面自动化测试

3.2.1登录模块测试

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

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

        //输入用户名为空密码不为空,提示用户名或密码不能为空
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#username")).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("#username")).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("#username")).clear();
        webDriver.findElement(By.cssSelector("#username")).sendKeys(currentUsername);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(errorPassword);
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1500);
        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("#username")).clear();
        webDriver.findElement(By.cssSelector("#username")).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();
        webDriver.findElement(By.cssSelector("#username")).clear();
        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:8081/index.html");
        Thread.sleep(1000);
        String str6 = webDriver.getCurrentUrl();
        if (str6.equals("http://127.0.0.1:8081/login.html")) {
            System.out.println("测试通过6");
        } else {
            System.out.println("测试不通过6");
        }

        //输入正确的用户名正确的密码登录成功,跳转到主页面
        webDriver.findElement(By.cssSelector("#username")).sendKeys(currentUsername);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(currentPassword);
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1500);
        String str7 = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        if (str7.equals("登录成功!") && webDriver.getCurrentUrl().equals(jumpUrl)) {
            System.out.println("测试通过7");
        } else {
            System.out.println("测试不通过7");
        }

        //登录成功后,访问登录页面和注册页面之外的页面,访问后页面不会自动跳转回登录页面
        webDriver.get("http://127.0.0.1:8081/index.html");
        Thread.sleep(1500);
        String str8 = webDriver.getCurrentUrl();
        if (str8.equals("http://127.0.0.1:8081/index.html")) {
            System.out.println("测试通过8");
        } else {
            System.out.println("测试不通过8");
        }

        //登录成功后,访问登录页面和注册页面之外的页面,访问后页面不会自动跳转回登录页面
        webDriver.get("http://127.0.0.1:8081/login.html");
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("body > div > div > div:nth-child(4) > div > span > a")).click();
        Thread.sleep(1000);
        String str9 = webDriver.getCurrentUrl();
        if (str9.equals("http://127.0.0.1:8081/register.html")) {
            System.out.println("测试通过9");
        } else {
            System.out.println("测试不通过9");
        }
    }

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

3.2.2注册模块测试

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

@Order(2)
    @ParameterizedTest
    @CsvSource({"'http://127.0.0.1:8081/register.html', 'http://127.0.0.1:8081/login.html'"})
    void register(String openUrl, String jumpUrl) throws InterruptedException {
        //输入用户名为空密码为空,提示用户名或密码不能为空
        webDriver.get(openUrl);
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#username")).sendKeys("");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("");
        webDriver.findElement(By.cssSelector("#submit")).click();
        String str0 = webDriver.switchTo().alert().getText();
        if (str0.equals("用户名或者密码不能为空!")) {
            System.out.println("测试通过0");
        } else {
            System.out.println("测试不通过0");
        }

        //输入用户名为空密码不为空,提示用户名或密码不能为空
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#username")).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("#username")).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("#username")).clear();
        String str3 = webDriver.findElement(By.cssSelector("#password")).getAttribute("type");
        if (str3.equals("password")) {
            System.out.println("测试通过3");
        } else {
            System.out.println("测试不通过3");
        }

        //输入用户名“神威”输入密码“111”,提示注册成功
        webDriver.findElement(By.cssSelector("#username")).sendKeys("神威");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("111");
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1500);
        String str4 = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        Thread.sleep(1500);
        if (str4.equals("注册成功!") && webDriver.getCurrentUrl().equals(jumpUrl)) {
            System.out.println("测试通过4");
        } else {
            System.out.println("测试不通过4");
        }

        //输入用户名“神威”输入密码“111”,提示注册失败
        webDriver.get("http://127.0.0.1:8081/register.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("神威");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("111");
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1500);
        String str5 = webDriver.switchTo().alert().getText();
        webDriver.switchTo().alert().accept();
        Thread.sleep(1500);
        if (str4.equals("注册失败!") && webDriver.getCurrentUrl().equals(jumpUrl)) {
            System.out.println("测试通过5");
        } else {
            System.out.println("测试不通过5");
        }

        //点击“点此登录”,跳转到登录页面
        webDriver.get("http://127.0.0.1:8081/register.html");
        webDriver.findElement(By.cssSelector("body > div > p > a")).click();
        String str6 = webDriver.getCurrentUrl();
        if (str6.equals("http://127.0.0.1:8081/login.html")) {
            System.out.println("测试通过6");
        } else {
            System.out.println("测试不通过6");
        }
    }

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

3.2.3展示各种信息模块测试

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

 @Order(3)
    @Test
    void index() throws InterruptedException {
        webDriver.findElement(By.cssSelector("#username")).sendKeys("火雷霆");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("111");
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1500);
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);


        //点击好友图标,好友图标变成蓝色会话图标变成白色;点击会话图标,会话图标变成蓝色好友图标变成白色
        webDriver.manage().window().maximize();
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li.brackets > a")).click();
        String attribute0 = webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li:nth-child(2) > a"))
                .getAttribute("class");
        String attribute_ = webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li.brackets > a"))
                .getAttribute("class");

        webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li:nth-child(2) > a")).click();
        String attribute00 = webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li:nth-child(2) > a"))
                .getAttribute("class");
        String attribute__ = webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li.brackets > a"))
                .getAttribute("class");
        if (attribute0.equals("") && attribute_.equals("active")
                && attribute00.equals("active") && attribute__.equals("")) {
            System.out.println("测试通过0");
        } else {
            System.out.println("测试不通过0");
        }


        //点击好友图标,页面左边显示好友列表,好友列表中的每一项要包含好友的名字
//        webDriver.get(openuUrl);
        webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li.brackets > a")).click();
        String str1 = webDriver.findElement(By.cssSelector("#friends")).getAttribute("class");
        String str2 = webDriver.findElement(By.cssSelector("#chats")).getAttribute("class");
        Thread.sleep(1000);
        WebElement element1 = webDriver.findElement(By.cssSelector("#info1 > li:nth-child(1) > div.parent > div > h6"));
        if (str1.equals("sidebar active") && str2.equals("sidebar") && !element1.getText().equals("")) {
            System.out.println("测试通过1");
        } else {
            System.out.println("测试不通过1");
        }

        //好友列表中的好友过多时,可以操作滚动条对好友列表进行上下滚动
        ((JavascriptExecutor) webDriver).executeScript("let one = document.querySelector('#friends > div.sidebar-body');\n" +
                "        let length1 = one.offsetHeight;\n" +
                "        console.log(length1);\n" +
                "        let length2 = one.scrollHeight;\n" +
                "        one.scrollTo(0, length2 - length1);");
        Long scrollTop1 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('#friends > div.sidebar-body').scrollTop;");
        if (scrollTop1 != 0) {
            System.out.println("测试通过2");
        } else {
            System.out.println("测试不通过2");
        }

        //点击会话图标,页面左边显示会话列表,会话列表中的每一项要包含会话主题和会话里的最后一条消息(即预览消息)
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li:nth-child(2) > a")).click();
        String str3 = webDriver.findElement(By.cssSelector("#chats")).getAttribute("class");
        String str4 = webDriver.findElement(By.cssSelector("#friends")).getAttribute("class");
        Thread.sleep(1000);
        WebElement element2 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > h5"));
        WebElement element3 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > p"));

        if (str3.equals("sidebar active") && str4.equals("sidebar")
                && !element2.getText().equals("") && element3 != null) {
            System.out.println("测试通过3");
        } else {
            System.out.println("测试不通过3");
        }

        //会话列表中的会话过多时,可以操作滚动条对会话列表进行上下滚动
        ((JavascriptExecutor) webDriver).executeScript("let one = document.querySelector('#chats > div');\n" +
                "        let length1 = one.offsetHeight;\n" +
                "        console.log(length1);\n" +
                "        let length2 = one.scrollHeight;\n" +
                "        one.scrollTo(0, length2 - length1);");
        Long scrollTop2 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        if (scrollTop2 != 0) {
            System.out.println("测试通过4");
        } else {
            System.out.println("测试不通过4");
        }


        //页面左下角显示已登录用户的名称
        String str5 = webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li:nth-child(4)")).getText();
        if (str5.equals("火雷霆")) {
            System.out.println("测试通过5");
        } else {
            System.out.println("测试不通过5");
        }


        //点击好友列表里的已经在会话列表中存在会话记录的好友,页面左边会从好友列表跳转到会话列表,然后相应的会话会置顶且被设置为高亮,会话列表的滑轮会滑倒最上方
        webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li.brackets > a")).click();
        //将好友列表向上滑
        ((JavascriptExecutor) webDriver).executeScript("let one = document.querySelector('#friends > div.sidebar-body');\n" +
                "        let length1 = one.offsetHeight;\n" +
                "        console.log(length1);\n" +
                "        let length2 = one.scrollHeight;\n" +
                "        one.scrollTo(0, length1 - length2);");
        List<WebElement> elements1 = webDriver.findElements(By.cssSelector("#info1 > li"));
        for (WebElement element : elements1) {
            if (element.findElement(By.cssSelector("h6")).getText().equals("急速锋")) {
                element.click();
                break;
            }
        }
//        //将会话列表向上滑
//        ((JavascriptExecutor)webDriver).executeScript("let one = document.querySelector('#chats > div');\n" +
//                "        let length1 = one.offsetHeight;\n" +
//                "        console.log(length1);\n" +
//                "        let length2 = one.scrollHeight;\n" +
//                "        one.scrollTo(0, length1 - length2);");
        String str6 = webDriver.findElement(By.cssSelector("#chats")).getAttribute("class");
        String str7 = webDriver.findElement(By.cssSelector("#friends")).getAttribute("class");
        Long scrollTop0_ = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        String attribute1 = webDriver.findElement(By.cssSelector
                ("#chats > div > ul > li:nth-child(1)")).getAttribute("class");
        if (str6.equals("sidebar active") && str7.equals("sidebar") && attribute1.equals("list-group-item open-chat")
                && scrollTop0_ == 0) {
            System.out.println("测试通过6");
        } else {
            System.out.println("测试不通过6");
        }


        //点击好友列表里的没有在会话列表中存在会话记录的好友,页面左边会从好友列表跳转到会话列表,然后相应的会话会被创建出来且置顶、高亮,会话列表的滑轮会滑倒最上方
        webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li.brackets > a")).click();
        webDriver.findElement(By.cssSelector("body > div.layout > nav > div > ul > li.brackets > a")).click();
        //将好友列表向下滑
        ((JavascriptExecutor) webDriver).executeScript("let one = document.querySelector('#friends > div.sidebar-body');\n" +
                "        let length1 = one.offsetHeight;\n" +
                "        console.log(length1);\n" +
                "        let length2 = one.scrollHeight;\n" +
                "        one.scrollTo(0, length2 - length1);");
        List<WebElement> elements2 = webDriver.findElements(By.cssSelector("#info1 > li"));
        for (WebElement element : elements2) {
            if (element.findElement(By.cssSelector("h6")).getText().equals("金爪神")) {
                element.click();
                break;
            }
        }
//        //将会话列表向上滑
//        ((JavascriptExecutor)webDriver).executeScript("let one = document.querySelector('#chats > div');\n" +
//                "        let length1 = one.offsetHeight;\n" +
//                "        console.log(length1);\n" +
//                "        let length2 = one.scrollHeight;\n" +
//                "        one.scrollTo(0, length1 - length2);");
        String str8 = webDriver.findElement(By.cssSelector("#chats")).getAttribute("class");
        String str9 = webDriver.findElement(By.cssSelector("#friends")).getAttribute("class");
        String attribute2 = webDriver.findElement(By.cssSelector
                ("#chats > div > ul > li:nth-child(1)")).getAttribute("class");
        Long scrollTop0 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        if (str8.equals("sidebar active") && str9.equals("sidebar") && attribute2.equals("list-group-item open-chat")
                && scrollTop0 == 0) {
            System.out.println("测试通过7");
        } else {
            System.out.println("测试不通过7");
        }


        //点击会话列表中的某一个会话,某一个会话会被设置为高亮
        webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(5)")).click();
        String attribute3 = webDriver.findElement(By.cssSelector
                ("#chats > div > ul > li:nth-child(5)")).getAttribute("class");
        String attribute4 = webDriver.findElement(By.cssSelector
                ("#chats > div > ul > li:nth-child(1)")).getAttribute("class");
        if (attribute3.equals("list-group-item open-chat") && attribute4.equals("list-group-item")) {
            System.out.println("测试通过8");
        } else {
            System.out.println("测试不通过8");
        }


        //点击会话列表中的某一个会话,某一个会话的会话主题会显示到页面右侧消息展示区域的左上方
        String title = webDriver.findElement(By.cssSelector("body > div.layout > div > div.chat > div.chat-header > div > div > h5"))
                .getText();
        if (title.equals("海无量")) {
            System.out.println("测试通过9");
        } else {
            System.out.println("测试不通过9");
        }


        //点击会话列表中的某一项,某一个会话的历史消息会显示到页面右侧消息展示区域且滚动条自动滚动到最下方
        //将会话列表向上滑
        ((JavascriptExecutor) webDriver).executeScript("let one = document.querySelector('#chats > div');\n" +
                "        let length1 = one.offsetHeight;\n" +
                "        console.log(length1);\n" +
                "        let length2 = one.scrollHeight;\n" +
                "        one.scrollTo(0, length1 - length2);");
        //这时点击的是火雷霆用户中标题为急速锋的会话
        webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(2)")).click();
        Thread.sleep(1000);
        WebElement element4 = webDriver.findElement(By.cssSelector("body > div.layout > div " +
                "> div.chat > div.self1 > div > div > div:nth-child(9) > div.message-content"));
        Long scrollTop3 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");
        if (element4 != null && scrollTop3 != 0) {
            System.out.println("测试通过10");
        } else {
            System.out.println("测试不通过10");
        }


        //如果页面右侧消息展示区域中的历史消息过多,可以操作滚动条对历史消息进行上下滚动
        //将历史消息向上滑
        ((JavascriptExecutor) webDriver).executeScript(
                "let one = document.querySelector('body > div.layout > div > div.chat > div.self1');\n" +
                        "        let length1 = one.offsetHeight;\n" +
                        "        console.log(length1);\n" +
                        "        let length2 = one.scrollHeight;\n" +
                        "        one.scrollTo(0, length1 - length2);");
        Long scrollTop4 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");
        if (scrollTop4 == 0) {
            System.out.println("测试通过11");
        } else {
            System.out.println("测试不通过11");
        }


        //页面右侧消息展示区域中,如果消息是所登录的用户发的,则消息气泡为蓝色且靠右;如果消息是非所登录的用户发的,则消息气泡为白色且靠左
        //页面右侧消息展示区域中,每个消息气泡上方会显示发送该消息气泡用户的用户名
        String friendName1 = webDriver.findElement(By.cssSelector("body > div.layout > div > div.chat " +
                "> div.self1 > div > div > div:nth-child(2) > div.message-avatar > div > h5")).getText();
        String attribute5 = webDriver.findElement(By.cssSelector("body > div.layout > div " +
                "> div.chat > div.self1 > div > div > div:nth-child(2)")).getAttribute("class");
        String friendName2 = webDriver.findElement(By.cssSelector("body > div.layout > div > div.chat " +
                "> div.self1 > div > div > div:nth-child(1) > div.message-avatar > div > h5")).getText();
        String attribute6 = webDriver.findElement(By.cssSelector("body > div.layout > div " +
                "> div.chat > div.self1 > div > div > div:nth-child(1)")).getAttribute("class");
        if (friendName1.equals("急速锋")) {
            if (attribute5.equals("message-item")) {
                System.out.println("测试通过12");
            } else {
                System.out.println("测试不通过12");
            }
        }
        if (friendName2.equals("火雷霆")) {
            if (attribute6.equals("message-item outgoing-message")) {
                System.out.println("测试通过13");
            } else {
                System.out.println("测试不通过13");
            }
        }

        //用非无痕模式重新打开一个窗口,登录火雷霆用户,提示“您在其它设备已经登录过了,请退出其它设备的登录后再在此设备进行重新登录”
        ((JavascriptExecutor) webDriver).executeScript("window.open('http://127.0.0.1:8081/login.html');");
        //切换到新打开的窗口
        for (String handle : webDriver.getWindowHandles()) {
            webDriver.switchTo().window(handle);
        }
        webDriver.findElement(By.cssSelector("#username")).sendKeys("火雷霆");
        webDriver.findElement(By.cssSelector("#password")).sendKeys("111");
        webDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1500);
        webDriver.switchTo().alert().accept();
        Thread.sleep(1000);
        String alertText1 = webDriver.switchTo().alert().getText();
        if (alertText1.equals("您在其它设备已经登录过了,请退出其它设备的登录后再在此设备进行重新登录")) {
            System.out.println("测试通过14");
            webDriver.switchTo().alert().accept();
        } else {
            System.out.println("测试不通过14");
        }

        //用无痕模式重新打开一个窗口,登录火雷霆用户,提示“您在其它设备已经登录过了,请退出其它设备的登录后再在此设备进行重新登录”
        webDriver1.get("http://127.0.0.1:8081/login.html");
        webDriver1.manage().window().maximize();
        webDriver1.findElement(By.cssSelector("#username")).sendKeys("火雷霆");
        webDriver1.findElement(By.cssSelector("#password")).sendKeys("111");
        webDriver1.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1500);
        webDriver1.switchTo().alert().accept();
        Thread.sleep(1000);
        String alertText2 = webDriver1.switchTo().alert().getText();
        if (alertText2.equals("您在其它设备已经登录过了,请退出其它设备的登录后再在此设备进行重新登录")) {
            System.out.println("测试通过15");
            webDriver1.switchTo().alert().accept();
        } else {
            System.out.println("测试不通过15");
        }
    }

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

3.2.34聊天消息传送模块测试

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

@Order(4)
    @ParameterizedTest
    @CsvSource({"'http://127.0.0.1:8081/index.html'"})
    void messageTransmission(String openUrl) throws InterruptedException {
        //登录用户为火雷霆,点击会话列表中标题为急速锋的会话,在页面右侧消息展示区域下方的输入框中输入信息然后发送,消息发送成功;
        //相应会话会置顶、高亮、预览消息为刚才火雷霆发的消息,会话列表滚动条滚动到最上方
        webDriver.close();
        for (String handle : webDriver.getWindowHandles()) {
            webDriver.switchTo().window(handle);
        }
        //将历史消息向下滑
        ((JavascriptExecutor) webDriver).executeScript("let one = document.querySelector('body > div.layout > div > div.chat > div.self1');\n" +
                "        let length1 = one.offsetHeight;\n" +
                "        console.log(length1);\n" +
                "        let length2 = one.scrollHeight;\n" +
                "        one.scrollTo(0, length2 - length1);");
        Thread.sleep(1000);
        Long scrollTop1 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");
        webDriver.findElement(By.cssSelector("body > div.layout > div > div.chat > div.chat-footer > form > input"))
                .sendKeys("去哪?");
        webDriver.findElement(By.cssSelector("#button")).click();
        Thread.sleep(1000);
        Long scrollTop2 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");

        String text1 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > h5"))
                .getText();
        String text2 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > p"))
                .getText();
        Long scrollTop3 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        String attribute1 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1)"))
                .getAttribute("class");
        if (text1.equals("急速锋") && text2.equals("去哪?") && scrollTop3 == 0
                && attribute1.equals("list-group-item open-chat") && scrollTop2 - scrollTop1 == 145) {
            System.out.println("测试通过1");
        } else {
            System.out.println("测试不通过1");
        }


        //用浏览器无痕模式重新打开一个窗口,再登录急速锋用户,会话列表中标题为火雷霆的会话的最后一条消息(即预览消息)变为了刚才火雷霆发的消息,
        //点击这个会话,可以在右侧消息展示区域最下方看到刚才火雷霆发的消息
        webDriver1.findElement(By.cssSelector("#username")).sendKeys("急速锋");
        webDriver1.findElement(By.cssSelector("#password")).sendKeys("222");
        webDriver1.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1500);
        webDriver1.switchTo().alert().accept();
        Thread.sleep(1000);
        webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(2)")).click();
        String text3 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(2) > div > div > p"))
                .getText();
        List<WebElement> elements1 = webDriver1.findElements(By.cssSelector("body > " +
                "div.layout > div > div.chat > div.self1 > div > div > div"));
        WebElement element1 = null;
        for (WebElement element : elements1) {
            element1 = element;
        }
        String text4 = element1.findElement(By.cssSelector("div.message-content")).getText();
        if (text3.equals("去哪?") && text4.equals("去哪?")) {
            System.out.println("测试通过2");
        } else {
            System.out.println("测试不通过2");
        }


        //刷新火雷霆和急速锋用户的页面,急速锋给火雷霆发消息,火雷霆能收到消息,火雷霆用户的相应会话会置顶、预览消息为刚才急速锋发的消息,
        //会话列表滚动条滚动到最上方;同时急速锋用户的相应会话置顶、高亮、预览消息为刚才急速锋发的消息,会话列表滚动条滚动到最上方
        webDriver.get(openUrl);
        webDriver1.get(openUrl);
        Thread.sleep(1000);
        webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(2)")).click();
        Thread.sleep(1000);
        Long scrollTop1_ = (Long) ((JavascriptExecutor) webDriver1)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");
        webDriver1.findElement(By.cssSelector("body > div.layout > div > div.chat > div.chat-footer > form > input"))
                .sendKeys("不知道");
        webDriver1.findElement(By.cssSelector("#button")).click();
        Thread.sleep(1000);
        Long scrollTop2_ = (Long) ((JavascriptExecutor) webDriver1)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");

        String text5 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > h5"))
                .getText();
        String text6 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > p"))
                .getText();
        Long scrollTop4 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        String attribute2 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1)"))
                .getAttribute("class");

        String text7 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > h5"))
                .getText();
        String text8 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > p"))
                .getText();
        Long scrollTop5 = (Long) ((JavascriptExecutor) webDriver1)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        String attribute3 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1)"))
                .getAttribute("class");
        if (scrollTop2_ - scrollTop1_ == 145
                && text5.equals("急速锋") && text6.equals("不知道") && scrollTop4 == 0 && attribute2.equals("list-group-item")
                && text7.equals("火雷霆") && text8.equals("不知道") && scrollTop5 == 0 && attribute3.equals("list-group-item open-chat")
                ) {
            System.out.println("测试通过3");
        } else {
            System.out.println("测试不通过3");
        }


        //刷新火雷霆和急速锋用户的页面,火雷霆用户会话列表中标题为急速锋的会话的最后一条消息(即预览消息)变成了刚才急速锋发的消息,
        //点击这个会话,可以在右侧消息展示区域最下方看到刚才急速锋发的消息
        webDriver.get(openUrl);
        webDriver1.get(openUrl);
        Thread.sleep(1000);
        //将会话列表向下滑
        ((JavascriptExecutor) webDriver).executeScript("let one = document.querySelector('#chats > div');\n" +
                "        let length1 = one.offsetHeight;\n" +
                "        console.log(length1);\n" +
                "        let length2 = one.scrollHeight;\n" +
                "        one.scrollTo(0, length2 - length1);");
        Thread.sleep(1000);
        String text9 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(9) > div > div > p")).getText();
        webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(9)")).click();
        Thread.sleep(1000);
        List<WebElement> elements2 = webDriver.findElements(By.cssSelector("body > " +
                "div.layout > div > div.chat > div.self1 > div > div > div"));
        WebElement element2 = null;
        for (WebElement element : elements2) {
            element2 = element;
        }
        Thread.sleep(1000);
        String text10 = element2.findElement(By.cssSelector("div.message-content")).getText();
        if (text9.equals("不知道") && text10.equals("不知道")) {
            System.out.println("测试通过4");
        } else {
            System.out.println("测试不通过4");
        }


        //刷新火雷霆和急速锋用户的页面,火雷霆给急速锋发消息,急速锋能收到消息,急速锋用户的相应会话会置顶、预览消息为刚才火雷霆发的消息,
        //会话列表滚动条滚动到最上方;同时火雷霆用户的相应会话会置顶、高亮、预览消息为刚才火雷霆发的消息,会话列表滚动条滚动到最上方
        webDriver.get(openUrl);
        webDriver1.get(openUrl);
        Thread.sleep(1000);
        //将会话列表向下滑
        ((JavascriptExecutor) webDriver).executeScript("let one = document.querySelector('#chats > div');\n" +
                "        let length1 = one.offsetHeight;\n" +
                "        console.log(length1);\n" +
                "        let length2 = one.scrollHeight;\n" +
                "        one.scrollTo(0, length2 - length1);");
        webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(9)")).click();
        Thread.sleep(1000);
        Long scrollTop3_ = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");
        webDriver.findElement(By.cssSelector("body > div.layout > div > div.chat > div.chat-footer > form > input"))
                .sendKeys("去风雪之城?");
        webDriver.findElement(By.cssSelector("#button")).click();
        Thread.sleep(1000);
        Long scrollTop4_ = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");
        String text11 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > h5"))
                .getText();
        String text12 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > p"))
                .getText();
        Long scrollTop6 = (Long) ((JavascriptExecutor) webDriver1)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        String attribute4 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1)"))
                .getAttribute("class");

        String text13 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > h5"))
                .getText();
        String text14 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > p"))
                .getText();
        Long scrollTop7 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        String attribute5 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1)"))
                .getAttribute("class");
        if (scrollTop4_ - scrollTop3_ == 145
                && text11.equals("火雷霆") && text12.equals("去风雪之城?") && scrollTop6 == 0 && attribute4.equals("list-group-item")
                && text13.equals("急速锋") && text14.equals("去风雪之城?") && scrollTop7 == 0 && attribute5.equals("list-group-item open-chat")
                ) {
            System.out.println("测试通过5");
        } else {
            System.out.println("测试不通过5");
        }


        //刷新火雷霆和急速锋用户的页面,急速锋用户会话列表中标题为火雷霆的会话的最后一条消息(即预览消息)变成了刚才火雷霆发的消息,
        //点击这个会话,可以在右侧消息展示区域最下方看到刚才火雷霆发的消息
        webDriver.get(openUrl);
        webDriver1.get(openUrl);
        Thread.sleep(1000);
        Thread.sleep(1000);
        String text15 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(2) > div > div > p")).getText();
        webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(2)")).click();
        Thread.sleep(1000);
        List<WebElement> elements3 = webDriver1.findElements(By.cssSelector("body > " +
                "div.layout > div > div.chat > div.self1 > div > div > div"));
        WebElement element3 = null;
        for (WebElement element : elements3) {
            element3 = element;
        }
        Thread.sleep(1000);
        String text16 = element3.findElement(By.cssSelector("div.message-content")).getText();
        if (text15.equals("去风雪之城?") && text16.equals("去风雪之城?")) {
            System.out.println("测试通过6");
        } else {
            System.out.println("测试不通过6");
        }



        //刷新火雷霆和急速锋用户的页面,急速锋给火雷霆发送一条消息,火雷霆给急速锋发送一条消息,消息均发送成功
        webDriver.get(openUrl);
        webDriver1.get(openUrl);
        Thread.sleep(1000);
        webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(2)")).click();
        Thread.sleep(1000);
        Long scrollTop5_ = (Long) ((JavascriptExecutor) webDriver1)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");

        webDriver1.findElement(By.cssSelector("body > div.layout > div > div.chat > div.chat-footer > form > input"))
                .sendKeys("不去");
        webDriver1.findElement(By.cssSelector("#button")).click();
        String text17 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > h5"))
                .getText();
        String text18 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > p"))
                .getText();
        Long scrollTop8 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        String attribute6 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1)"))
                .getAttribute("class");

        String text19 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > h5"))
                .getText();
        String text20 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > p"))
                .getText();
        Long scrollTop9 = (Long) ((JavascriptExecutor) webDriver1)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        String attribute7 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1)"))
                .getAttribute("class");


        webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1)")).click();
        webDriver.findElement(By.cssSelector("body > div.layout > div > div.chat > div.chat-footer > form > input"))
                .sendKeys("雷霆殿?");
        webDriver.findElement(By.cssSelector("#button")).click();
        String text21 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > h5"))
                .getText();
        String text22 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > p"))
                .getText();
        Long scrollTop10 = (Long) ((JavascriptExecutor) webDriver1)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        String attribute8 = webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1)"))
                .getAttribute("class");

        String text23 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > h5"))
                .getText();
        String text24 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1) > div > div > p"))
                .getText();
        Long scrollTop11 = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('#chats > div').scrollTop;");
        String attribute9 = webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(1)"))
                .getAttribute("class");
        if(text17.equals("急速锋") && text18.equals("不去") && scrollTop8 == 0 && attribute6.equals("list-group-item")
        && text19.equals("火雷霆") && text20.equals("不去") && scrollTop9 == 0 && attribute7.equals("list-group-item open-chat")
        && text21.equals("火雷霆") && text22.equals("雷霆殿?") && scrollTop10 == 0 && attribute8.equals("list-group-item open-chat")
        && text23.equals("急速锋") && text24.equals("雷霆殿?") && scrollTop11 == 0 && attribute9.equals("list-group-item open-chat")) {
            System.out.println("测试通过7");
        } else {
            System.out.println("测试不通过7");
        }



        //刷新火雷霆和急速锋用户的页面,急速锋用户会话列表中标题为火雷霆的会话的最后一条消息(即预览消息)变成了刚才最后发的一条消息,
        //点击这个会话,可以在右侧消息展示区域看到刚才火雷霆和急速锋相互发的消息;火雷霆用户会话列表中标题为急速锋的会话的最后一条消息
        //(即预览消息)变成了刚才最后发的一条消息,点击这个会话,可以在右侧消息展示区域看到刚才火雷霆和急速锋相互发的消息
        webDriver.get(openUrl);
        webDriver1.get(openUrl);
        Thread.sleep(1000);
        webDriver1.findElement(By.cssSelector("#chats > div > ul > li:nth-child(2)")).click();
        Thread.sleep(1000);
        Long scrollTop6_ = (Long) ((JavascriptExecutor) webDriver1)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");
        //将会话列表向下滑
        ((JavascriptExecutor) webDriver).executeScript("let one = document.querySelector('#chats > div');\n" +
                "        let length1 = one.offsetHeight;\n" +
                "        console.log(length1);\n" +
                "        let length2 = one.scrollHeight;\n" +
                "        one.scrollTo(0, length2 - length1);");
        Thread.sleep(1000);
        webDriver.findElement(By.cssSelector("#chats > div > ul > li:nth-child(9)")).click();
        Thread.sleep(1000);
        Long scrollTop7_ = (Long) ((JavascriptExecutor) webDriver)
                .executeScript("return document.querySelector('body > div.layout > div > div.chat > div.self1').scrollTop;");
        if(scrollTop6_ - scrollTop5_ == 290 && scrollTop7_ - scrollTop5_ == 290) {
            System.out.println("测试通过8");
        } else {
            System.out.println("测试不通过8");
        }
    }

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

四、测试结论与建议

该网站存在一些缺陷,但这些缺陷不影响基本功能的正常使用。
以下是针对缺陷给出的一些改进建议:
1、缺陷:可以注册多个用户名和密码相同的用户。建议:用户名相同的用户不能同时注册。
2、缺陷:在主页面中,会话列表事先没有处于最上方的前提下,点击好友列表里的好友,页面左边会从好友列表跳转到会话列表,然后相应的会话会置顶且被设置为高亮,然而会话列表的滑轮却不会自动滑到最上方,这导致了用户看不到相应的置顶且被设置为高亮的会话。
建议:点击好友列表里的好友,页面左边从好友列表跳转到会话列表后,会话列表的滑轮要可以自动滑倒最上方。
3、缺陷:在主页面中,会话列表事先没有处于最上方的前提下,某个会话收到信息时,会话会置顶,然而会话列表的滑轮却不会自动滑到最上方,这导致了用户看不到相应的置顶的会话。
建议:会话列表中的某个会话收到信息时,会话列表的滑轮要可以自动滑倒最上方。
4、缺陷:输入过长的消息然后发送,符号或数字文本在气泡中不能正常显示,而文字文本却能在气泡中正常显示;消息发送之后,滑动鼠标滑轮将消息展示区域的消息上下滑动时,在消息展示区域中的消息有时会上下滑动,有时又会左右滑动,有时在消息展示区域的下方会出现左右滑动的滚动条,有时又不会出现左右滚动的滚动条。
建议:输入过长的消息然后发送,无论发送的消息是符号、数字还是文字,均能在气泡中正常显示;消息发送之后,滑动鼠标滑轮将消息展示区域的消息上下滑动时,可以正常上下滑动,且消息展示区域的下方不会出现左右滑动的滚动条。
5、缺陷:缩小页面后页面整体布局会变形。建议:缩小页面后,使得页面整体布局不会变形。
6、缺陷:放大页面后有时右侧会出现会话列表、有时又不会出现会话列表。建议:放大页面后,使得页面右侧不会出现会话列表。
7、缺陷:登录按钮、注册按钮没有键盘上的Enter事件。建议:给登录按钮、注册按钮添加键盘上的Enter事件。

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

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

相关文章

Ubuntu软件中心不显示

装完Ubuntu后没有Software -- 更新apt sudo apt update -- 升级apt sudo apt upgrade -- 重启 sudo systemctl reboot-- 安装snap sudo apt-get install snap -- 安装软件商店 sudo snap install snap-store -- 更新软件商店 sudo snap refresh snap-store安装成功&#xff01…

C语言,实现数字谱到简谱的转换(二)

C语言&#xff0c;实现数字谱到简谱的转换&#xff08;二&#xff09; 前言&#xff1a;本文初编辑于2024年5月8日 CSDN&#xff1a;https://blog.csdn.net/rvdgdsva 博客园&#xff1a;https://www.cnblogs.com/hassle 前言 结合前文使用 之前的程序默认C调4/4拍&#xff…

论文润色就用意得辑:让你的学术之作更上一层楼

在学术的海洋里&#xff0c;每一篇论文都是一艘承载智慧与探索的小船。然而&#xff0c;好的内容也需要好的包装&#xff0c;才能更好地展现其价值。在这个追求精益求精的时代&#xff0c;意得辑以其专业的论文润色服务&#xff0c;成为了众多学者们的得力助手。 意得辑&#…

matlab 基于拉依达检验法(3σ准则) 实现多类别多参数的批量异常样本检验 V2.0

简介 拉依达检验法&#xff08;3σ准则&#xff09;是一种统计学方法&#xff0c;用于检测数据中的异常值。这种方法基于正态分布的特性来确定数据点是否可能是异常值。以下是关于拉依达检验法&#xff08;3σ准则&#xff09;的详细介绍&#xff1a; 基本原理&#xff1a; 拉…

移除链表元素题目讲解

一&#xff1a;题目 二&#xff1a;思路讲解 方法一&#xff1a; 1&#xff1a;创建两个指针prev和cur&#xff0c;初识位置cur为head&#xff0c;prev为NULL&#xff0c;然后两个指针往后移动开始去寻找与val值吻合的节点&#xff0c;最后找到节点的时候&#xff0c;cur指向…

Linux基础之yum和vim

目录 一、软件包管理器yum 1.1 软件包的概念 1.2 软件包的查看 1.3 软件包的安装和删除 二、Linux编辑器之vim 2.1 vim的基本概念 2.2 正常模式&#xff08;命令模式&#xff09; 2.3 底行模式 2.4 输入模式 2.5 替换模式 2.6 视图模式 2.7 总结 一、软件包管理器yu…

SSL证书0元购完整教程

为了确保在线交互的安全性与可信度&#xff0c;越来越多的网站选择启用SSL&#xff08;Secure Sockets Layer&#xff09;证书&#xff0c;为数据传输加上一层坚实的保护罩。尤为值得一提的是&#xff0c;随着技术的发展与行业推动&#xff0c;免费SSL证书逐渐成为众多网站所有…

秒翻-网页翻译最佳选择

使用方法&#xff1a; 安装“沉浸式翻译” 在扩展设置页面勾选“Beta”特性。 输入 DeepLX 现成的 API-https://api.deeplx.org/translate。

【Git】Commit后进行事务回滚

起因 因为一直使用git add .&#xff0c;在学习pytorch中添加了一个较大的数据集后&#xff0c;导致git push失败&#xff0c;而这个大数据集并不是必须要上传到仓库的&#xff0c;但是因为自己在设置.gitignore前已经进行了git comit&#xff0c;所以&#xff0c;需要进行事务…

C#中实现DataGridView数据的优雅Excel之旅(EPPlus)

DataGridView效果图&#xff1a; EXCEL效果图: 代码如下&#xff1a; 首先要引入EPPlus包 可以使用命令行来安装 Install-Package EPPlus 也可以使用NUGet搜索EPPlus来安装 public Homes(){InitializeComponent();ExcelPackage.LicenseContext OfficeOpenXml.LicenseContext…

机器学习:人工智能中实现自动化决策与精细优化的核心驱动力

&#x1f512;文章目录: &#x1f4a5;1.概述 ❤️2.机器学习基本原理 &#x1f6e4;️2.1定义与关键概念 &#x1f6e3;️2.2 机器学习算法 ☔3.自动化决策中的机器学习应用 &#x1f6b2;4.精细优化与机器学习的结合 &#x1f44a;5.挑战与前景 &#x1f4a5;1.概述 …

2024年学浪课程下载工具

学浪下载工具我已经打包好了&#xff0c;有需要的自己下载一下 学浪下载器链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先解压好我给大家准备好的压缩包 2.打开解压好的文件夹里面的N_m3u8D文件夹&#xff0c;然…

世界上最好用的在线看板工具 Trello 已支持 AI 啦!

对 Trello 免费版用户的提醒 从5月20日开始&#xff0c;免费版 Trello 工作区仅支持 10 个协作者&#xff0c;超过此限制将仅支持查看&#xff0c;无法编辑。解决这一问题的方法是减少协作者数量或升级到标准版或高级版。 Atlassian 去年在其云平台中引入了人工智能工具 Atlas…

TikTok营销策略解析:7大关键要素打造品牌影响力

TikTok作为近年来迅速崛起的短视频社交平台&#xff0c;已经成为全球范围内品牌营销的重要阵地。对于品牌而言&#xff0c;如何在TikTok上有效地开展营销活动&#xff0c;吸引目标受众的注意力&#xff0c;提升品牌知名度和影响力&#xff0c;是摆在他们面前的重要课题。本文No…

Tcl学习笔记(四)——流程控制、过程、命名空间、访问文件

1. 流程控制 if命令 if命令后跟两个参数&#xff1a;表达式、待执行的Tcl脚本。if命令中的每一个左大括号都必须与它前一个字符同行。 有elseif和else可选子句&#xff0c;使用时与if中第二个参数的右大括号放在同一行。 switch命令 switch命令利用一个给定值与多个模式进行匹…

Redis-五大数据类型-Hash(哈希)

五大数据类型-Hash&#xff08;哈希&#xff09; 简介 Hash是一个键值对的集合。 Hash 是一个 String 类型的 field&#xff08;字段&#xff09; 和 value&#xff08;值&#xff09; 的映射表&#xff0c;hash 特别适合用于存储对象。 Hash 是 Redis 中出现最为频繁的复合…

大模型市场爆发式增长,但生成式AI成功的关键是什么?

进入2024年&#xff0c;大模型市场正在爆发式增长。根据相关媒体的总结&#xff0c;2024年1-4 月被统计到的大模型相关中标金额已经达到2023年全部中标项目披露金额的77%左右&#xff1b;其中&#xff0c;从项目数量来看&#xff0c;应用类占63%、算力类占21%、大模型类占13%、…

OpenCV 入门(六) —— Android 下的人脸识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…

如何查看打包后的jar包启动方法

背景 有时候我们在引用一个jar包的时候,想查看一个jar包的结构,这时候查看启动类就比较重要,因为一些关键配置是在启动类上的,这里教大家如何查看这个启动类(springboot项目) 步骤 首先打开jar包预览结构,可以使用解压缩工具直接双击打开或者预览结构 打开路径 META-INF/MA…

遥感+大数据为智慧无人农场按下“倍速键”

春回大地万象“耕”新&#xff0c;在襄阳市襄州区张家集镇近2000亩小麦绿意盎然、勃勃生机。 湖北绿神农业科技有限公司的生产经理王真指着监控室的电脑屏幕&#xff0c;告诉记者在与珈和科技合作开发的农田遥感监测平台上各类农田数据一目了然&#xff0c;为实现农业智能化管理…