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

2024-05-08 18:52

本文主要是介绍小项目“谈笑风生”测试报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、项目介绍
    • 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)@Testvoid 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.chinasem.cn/article/971151

相关文章

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定义代码 6.element常用标签6.1.下拉列表

局域网内vue2 配置本地IP地址访问项目

在日常开发中同事可能需要访问你的前端项目,可以通过配置实现通过ip访问 一.首先找到config文件夹目录下的 index.js文件             将此处的host的值修改为0.0.0.0(即 host: 0.0.0.0) // Various Dev Server settings//host: 'localhost' //将localhost进行替换成 0.0.0.0host:

把Tiled中做出的地图弄到项目中~~就是懒,为了以后直接复制写过来

1.现在.h中声明private: cocos2d::CCSprite* ninja; cocos2d::CCTMXTiledMap*  tileMap; 然后.cpp中加入tileMap = CCTMXTiledMap::create("MyTileMap.tmx"); CCTMXLayer* backLayer = tileMap->layerNamed("Tile L

CocoStudio中的UI弄到项目中

1、   与alpah版相比,beta版中更改了创建的脚本,可以自定义项目的目录,接下来我们看看。先上图: 2、项目创建     找到 cocos2dx根目录/tools/project-creator/create_project.py文件,双击运行即可。如果未安装python环境,则需要下载安装。脚本运行起来,会显示一个图形界面,用以设置相应的项目

计算机Java项目|基于SpringBoot的网上摄影工作室

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路  关注作者有好处 文末获取源码  项目编号:L-BS-QBBSSPRINGBOOT