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

文章目录

  • 一、项目介绍
    • 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://xiahunao.cn/news/3019125.html

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

相关文章

vmware虚拟机内删除文件后宿主机空间不释放

问题描述 linux下&#xff0c;vmware内虚拟机删除文件&#xff0c;宿主机空间不释放&#xff0c;D盘快满了 解决方法 通过vmware-toolbox进行空间回收 安装 在虚拟机内操作 yum install -y open-vm-tools 清理 在虚拟机内操作 #查看磁盘的挂载点 sudo /usr/bin/vmware…

探索宇宙奥秘:太阳系运转的三维可视化之旅

在宇宙探索的伟大征途中&#xff0c;太阳系运转三维可视化技术为我们揭开了星辰大海的一角。通过图扑可视化技术&#xff0c;我们能够以前所未有的方式直观地体验和理解太阳及其周围行星的运动规律。这不仅是对于天文学家的一大帮助&#xff0c;也为广大天文爱好者和教育者提供…

如何理解GTX发送通道的用户接口?(高速收发器二)

前文讲解了高速收发器的QPLL及CPLL和差分时钟相关内容&#xff0c;如下图所示。本文就打开高速收发器通道的内部结构&#xff0c;进行简要讲解。 图21GTXE2_CHANNEL原始拓扑 收发器的内部框图如下所示&#xff0c;上半部分是发送通道&#xff0c;下半部分是接收通道&#xff0c…

ubuntu下pyinstaller打包多个.py文件

参考链接&#xff1a; https://blog.csdn.net/CholenMine/article/details/80964272 https://blog.csdn.net/BXD1314/article/details/125226289 前言 要把python项目打包成可执行程序运行&#xff0c;看了很多帖子&#xff0c;大多数博主都采用pyinstall 打包&#xff0c;但…

车间为什么选择蒸发式冷风机?

蒸发式冷风机具有以下特点&#xff1a; 节能环保&#xff1a;蒸发式冷风机不使用压缩机和化学制冷剂&#xff0c;而是通过水的蒸发来降低温度&#xff0c;因此它是无压缩机、无冷媒、无污染的环保型产品。降温效果显著&#xff1a;在较潮湿地区&#xff0c;它一般能达到5-9℃的…

苹果iPad M4:Console级别图形和AI强大功能

苹果iPad M4&#xff1a;Console级别图形和AI强大功能 Apple近日发布了最新的M4芯片&#xff0c;旨在为iPad Pro系列带来明显的性能提升和电池续航时间延长。在本篇报道中&#xff0c;我们将详细介绍M4芯片的特点、性能改进和为创意专业人士带来的影响。 M4芯片的强大功能 …

第二证券|1.73万亿“聪明钱”A股扫货买了什么?

跟着A股上市公司一季报披露收官&#xff0c;备受商场重视的险资、社保基金和QFII等各大组织持仓数据浮出水面。 Wind计算数据显现&#xff0c;719家A股上市公司的十大流通股股东有QFII身影&#xff0c;险资和社保基金分别现身754只和659只个股的前十大流通股股东&#xff0c;Q…

用户体验至上的Spring Boot博客系统

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

Linux/C++——线程池

什么是线程池 线程池其实就是一种多线程处理形式&#xff0c;处理过程中可以将任务添加到队列中&#xff0c;然后在创建线程后自动启动这些任务。 为什么要引入线程池 在单线程的场景中&#xff0c;如在服务端的服务中&#xff0c;要对多个客户端进行服务&#xff0c;单个线…

不得不聊的微服务Gateway

一、 什么是Gateway&#xff1f; 1.网关的由来 单体应用拆分成多个服务后&#xff0c;对外需要一个统一入口&#xff0c;解耦客户端与内部服务 2.网关的作用 Spring Cloud Gateway是Spring Cloud生态系统中的一员&#xff0c;它被设计用于处理所有微服务的入口流量。作为一…

志邦家居流程项目中心负责人郑瑶瑶受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 志邦家居股份有限公司流程项目中心负责人、战略及变革委员会秘书长郑瑶瑶女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“PMO在制造企业的标准化建设之路”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&…

社区智能奶柜:创业新机遇

社区智能奶柜&#xff1a;创业新机遇 在追求高质量生活的今天&#xff0c;健康食品成为大众焦点。社区智能奶柜适时登台&#xff0c;革新了居民获取新鲜牛奶的传统模式&#xff0c;为创业者开辟了一片蓝海市场。 一、新兴创业蓝海&#xff1a;牛奶随享站 日常膳食中&#xf…

【系统架构师】-UML-用例图(Use Case)

1、概述 用于表示系统功能需求&#xff0c;以及应用程序与用户或者与其他应用程序之间的交互关系。 2、组成 参与者&#xff08;Actors&#xff09;&#xff1a;与系统交互的用户或其他系统。用一个人形图标表示。用例&#xff08;Use Cases&#xff09;&#xff1a;系统需要…

sql查询数据语句

select * from 表名 where 列名 某个数据名字 查询某个表名中的某列是否有某个数据

孩子咳嗽,积食?可以试试宋乐冬医生分享的几个缓解方法~

最近气温变化大忽冷忽热&#xff0c;多变的天气容易引发儿童疾病。 不少妈妈也在后台咨询&#xff0c;想要学习一下常用的小儿推拿&#xff0c;在孩子身体出现轻微不适时&#xff0c;能够给孩子做做小儿推拿来辅助治疗&#xff0c;缓解不适恢复健康。 今天我们就一起学习一下&a…

视频剪辑图文实例:一键操作,轻松实现视频批量片头片尾减时

视频剪辑是现代媒体制作中不可或缺的一环&#xff0c;而批量处理视频更是许多专业人士和爱好者的常见需求。在剪辑过程中&#xff0c;调整视频的片头片尾时长可以显著提升视频的质量和观感。本文将通过图文实例的方式&#xff0c;向您展示如何一键操作&#xff0c;轻松实现视频…

Debian——安装syzkaller——2024

系统:Debian 远程连接——我是不想安装tools没有办法复制黏贴,所以远程,根据个人情况选择是否远程连接 就是说使用Windows自带的远程mstsc,使用的不是ssh22端口,是TCP 3389端口 mkdir debian cd debian 二:安装go编译器 打开终端。使用wget命令从官方网站或可信的镜像…

关于行内(块)元素vertical-align:middle;居中对齐

有时候 会发现 对行内元素或者行内块元素设置垂直居中vertical-align&#xff1a;middle&#xff1b;与不设置&#xff0c;没有什么变化 这是因为vertical-align不是作用于行内&#xff08;块&#xff09;元素自身&#xff0c;它是作用于其他行内&#xff08;块&#xff09;元素…

醛固酮(Aldosterone)/Aldosterone ELISA kit--比色竞争法酶免疫检测试剂盒

醛固酮&#xff08;Aldosterone&#xff09;是一种由肾上腺皮质中的胆固醇合成的类固醇激素。醛固酮在肾脏和肝脏中代谢&#xff0c;并作为控制钠钾平衡的关键盐皮质激素发挥作用。肾上腺合成和释放醛固酮主要受肾素-血管紧张素-醛固酮系统&#xff08;RAAS&#xff09;的调节&…

图纸管理的高效策略与最佳实践

图纸管理的高效策略与最佳实践 在工程设计、产品研发和建筑行业中&#xff0c;图纸管理是一项至关重要的任务。随着项目规模的扩大和复杂性的增加&#xff0c;如何高效、有序地管理图纸已成为企业和团队关注的焦点。本文将为您介绍图纸管理的高效策略与最佳实践&#xff0c;帮助…