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

news2024/11/24 19:21:23

文章目录

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

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

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

相关文章

8.Redis

Redis是一个基于内存的key-value结构数据库&#xff0c;而mysql是通过数据文件&#xff0c;以二维表的方式存储在磁盘上。 优点 基于内存存储&#xff0c;读写性能高适合存储热点数据企业应用广泛 Redis目录文件 启动命令 redis-server.exe redis.windows.conf 退出命令 c…

☺☺☺☺☺☺☺栈的应用习题:有效的括号☺☺☺☺☺☺☺

目录 一解题思路&#xff1a; 二对解答代码分析&#xff1a; 三解答代码展示&#xff1a; 即浅学栈的创建后&#xff0c;可以简单利用其性质&#xff08;先进后出&#xff0c;后进先出&#xff09;来完成对一些题目的解答 如&#xff1a; 一解题思路&#xff1a; 这里我们可…

图数据库 之 Neo4j 与 AI 大模型的结合绘制知识图谱

引言 随着信息时代的到来&#xff0c;海量的文本数据成为了我们获取知识的重要来源。然而&#xff0c;如何从这些文本数据中提取出有用的信息&#xff0c;并将其以可视化的方式展示出来&#xff0c;一直是一个具有挑战性的问题。近年来&#xff0c;随着人工智能技术的发展&…

2024年开抖音小店需要多少钱?你真的知道吗?最新入驻条件及费用

大家好&#xff0c;我是电商花花。 现在仍然有很多想开抖店&#xff0c;想做抖音小店&#xff0c;但是很多人都不知道投资一家抖音小店需要多少钱&#xff0c;今天花花就给大家讲一下做一家抖音小店需要投入多少资金&#xff0c;以及具体投入到哪些方面。 我们就说一下个体店…

layui 数据表格 自动定位新增行位置

由于数据表格新增行后没有到新增到当前位置 继续增加的需求&#xff1a; 因为自己是新增行后到最后一行的 所以 就定位到最后一行 并且 高亮 高亮颜色浅 可自行更改 整理了一下 可根据 情况 修改 // 初始化滚动条位置变量 let tableScroll {scrollTob: 0,scrollLeft: 0,…

Shuffle Cards (STL rope平衡树库)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例1&#xff1a; 输入 5 1 2 3 输出 2 3 4 1 5 样例2&#xff1a; 输入 5 2 2 3 2 3 输出 3 4 1 2 5 样例3&#xff1a; 输入 5 3 2 3 1 4 2 4输出 3 4 1 5 2 思路&#xff1a; 这道题&…

windows端口复用

1. 概述 使用 HTTP.sys 中的 Net.tcp Port Sharing 服务&#xff0c;配合 WinRM 实现端口复用。 优点&#xff1a; HTTP.sys 为 windows 原生机制&#xff0c; WinRM 为 windows 自带功能&#xff0c;动作较小&#xff0c;不易触发主 动防御。 需要管理员权限。 2. 原理 (…

STM32 VS Code 扩展用户指南

系列文章目录 前言 一、视频教程快速入门 通过我们简单易学的视频教程&#xff0c;快速掌握新版本的使用方法&#xff1a; 二、功能描述 2.1 创建/导入项目 STM32 VS Code 扩展提供两种不同的项目创建选项&#xff1a; STM32CubeMX 项目&#xff1a; 这是一个依靠 CMake 作为…

线下预约线下消费万能DIY小程序源码系统 带完整安装代码包

在数字化时代&#xff0c;线上线下融合的消费模式已成为新趋势。为满足广大商家对于个性化预约系统的需求&#xff0c;我们隆重推出了“线下预约线下消费万能DIY小程序源码系统”。该系统不仅具备完整的安装代码包&#xff0c;还提供了丰富的定制功能&#xff0c;助力商家轻松搭…

【大比武01】AIGC赋能档案文创设计的尝试

关注我们 - 数字罗塞塔计划 - 随着科技的飞速发展&#xff0c;AI技术逐渐深入我们的工作与生活&#xff0c;特别是随着2022年底ChatGPT的横空出世&#xff0c;AIGC&#xff08;Artificial Intelligence Generated Content&#xff0c;内容生成式人工智能&#xff09;开始登上历…

Covalent引入五个新网络运营商,提升去中心化特性和数据安全性

为了进一步扩大运营商基础以并践行去中心化网络基础设施的宗旨&#xff0c;Covalent Network&#xff08;CQT&#xff09;在网络中引入了五个新的区块样本生产者&#xff08;BSPs&#xff09;角色。该举措不仅重申了 Covalent Network&#xff08;CQT&#xff09;对社区驱动协议…

20基础解决-buuctf-1.RSA1

2.buuctf-1.RSA1 RSATool2v17工具的使用 打开RSA Tool 1.Number Base 设置为十进制 2.注意&#xff1a;Public Exponent这里要使用16进制的数&#xff0c;如果公钥e17的话&#xff0c;就应该填入十六进制的11 3.给出p,q,e的话直接填入&#xff0c;再点击Calc.D,获得d 4.给出…

【第6节课笔记】LagentAgentLego

Lagent 最中间部分的是LLM&#xff0c;即为大语言模型模块&#xff0c;他可以思考planning和调用什么action&#xff0c;再将其转发给动作执行器action executer执行。 支持的工具如下&#xff1a; Arxiv 搜索 Bing 地图 Google 学术搜索 Google 搜索 交互式 IPython 解释器 IP…

C++ | Leetcode C++题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m matrix.size(), n matrix[0].size();int low 0, high m * n - 1;while (low < high) {int mid (high - low) / 2 l…

安卓玩机工具----一键备份手机分区 防止全檫除或者格机导致安全数据分区丢失

工具说明; 目前玩机root后有很多格机脚本。模块等等误刷会导致基带信号等等问题&#xff0c;在前面的博文中我有介绍过备份主要数据分区的重要性 。其实对于不了解root和不安装有些模块 外挂等等需要的友友不建议对手机进行root。root后对于手机安全性会有所降低。对于玩家来说…

信创 | 中国信创建设的历程与未来展望!

中国信创建设的历程与未来展望可以从多个维度进行分析。首先&#xff0c;从发展历程来看&#xff0c;中国信创产业的发展可以分为几个阶段。根据不同的资料来源&#xff0c;这些阶段的划分有所不同&#xff0c;但大体上可以概括为起步、试点、快速发展等关键时期。 起步阶段&am…

医疗器械软件如何生成符合FDA要求的SBOM文件?

在当今这个高度互联的世界&#xff0c;医疗器械的安全性和可靠性对于保障公众健康至关重要。FDA作为美国食品和药物的主要监管机构&#xff0c;长期以来一直致力于确保医疗器械的安全性和有效性。 2023年9月27日&#xff0c;美国食品和药品监督管理局&#xff08;后续简称FDA&…

文本批量操作实例:如何实现文本批量拆分?实用方法与技巧分享

在文本处理和数据分析的过程中&#xff0c;我们经常会遇到需要批量拆分大量文本数据的情况。文本批量拆分能够大大提高工作效率&#xff0c;减少重复劳动。下面&#xff0c;我们将通过一个实例来介绍如何实现文本批量拆分&#xff0c;并分享一些实用方法与技巧。 一、实例背景 …

ESP32S3各个管脚使用需要注意的情况说明:

想使用ESP32S3做个控制电路&#xff0c;管脚使用情况自己整理了一下&#xff0c;记录一下&#xff0c;免得后面又忘记了&#xff0c;有不对之处望帮助更正&#xff1a; IO0和IO46先要说明一下&#xff1a;以前只注意IO0是启动刷机的时候用的&#xff0c;低电平时启动是串口刷机…

MT2050 矩阵01变

注意&#xff1a; 输入是直接输入了一行&#xff0c;所以不能使用for i{ for j {} }&#xff0c;可以使用string 读一行然后挨个分析。 使用前缀和。 代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 105; int n, m; int b[N][N]; strin…