一. 项目背景
论坛交流系统是采用前后端分离的方式实现的,使用到的技术有:SpringBoot,SpringMVC,MyBatis,MySQL。
该系统旨在为用户提供一个基于 Web 的文章发布和讨论平台。用户可以进行注册登录、查看和修改个人信息,以及进行帖子的增删改查等基础操作。此外,系统还提供了评论、站内信等交流功能,用户可以对帖子进行点赞,并在帖子详情页上查看阅读量、点赞数、评论量等信息。此文章是对该系统进行各种测试得出的测试报告。
二. 测试安排
2.1 测试环境
硬件:Lenovo Yoga 14S 2021(R7-5800H/16GB/512GB/集显)
操作系统:Windows 10
浏览器:chrome 128.0.6613.84(正式版本) (64 位)
项目运行环境:CentOS7、maven、JDK1.8
自动化脚本运行环境:IIntelliJ IDEA 2021.2.2
2.2 测试用例
2.2.1 功能测试用例
2.2.2 非功能测试用例
三. 测试分类
1. 手动功能测试
- 对注册页面进行的测试
场景1:在输入部分注册信息时,由于信息不全,点击注册按钮后系统应该给出相应的提示。
预期结果:页面提示部分信息不能为空。
实际结果:系统确实给出了相应的提示,要求补全所有必填项,与预期一致。
场景2:输入一个不存在的用户名,并且输入密码与确认密码不一致,然后点击注册按钮。
预期结果:系统应该提示用户检查确认密码是否输入一致。
实际结果:系统确实给出了相应的提示,指示用户检查确认密码,与预期结果一致。
场景3:输入一个已经存在的用户名,并确保密码和确认密码一致,然后点击注册按钮。
预期结果:系统应该提示用户该用户名已经存在。
实际结果:系统确实给出了提示,提示用户该用户名已经存在,与预期结果一致。
场景4:输入一个不存在的用户名,同时确保密码和确认密码一致,然后点击注册按钮。
预期结果:系统应该显示注册成功,并跳转回登录界面。
实际结果:系统确实显示了注册成功,并且跳转回了登录界面,符合预期。
- 对登录页面进行的测试
场景1:输入一个已经存在的用户名,并确保密码输入正确,然后点击登录按钮。
预期结果:系统应该显示登录成功,并跳转到论坛首页。
实际结果:系统确实显示了登录成功,并且跳转到了论坛首页,与预期结果一致。
场景2:输入一个已经存在的用户名,并且输入错误的密码,然后点击登录按钮。
预期结果:系统应该显示登录失败,并给出相应的错误提示。
实际结果:系统确实显示了登录失败,并给出了错误提示,符合预期。
场景3:输入一个不存在的用户名,然后点击登录按钮。
预期结果:系统应该显示登录失败,并给出相应的错误提示。
实际结果:系统确实显示了登录失败,并给出了错误提示,符合预期。
- 对首页进行测试
场景1:在未登录或登录过期的状态下,点击首页链接或手动输入首页地址。
预期结果:系统应该自动跳转回登录界面,要求用户重新登录。
实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。
场景2:在未登录状态下录或登录过期的状态下,点击首页中的任意一条帖子内容。
预期结果:系统应该自动跳转回登录界面,要求用户重新登录。
实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。
场景3:登录状态下,点击“首页”按钮。
预期结果:应该显示导航栏中的所有版块名称,下方应显示所有帖子列表,并且右上方应该显示登录用户的信息。
实际结果:系统确实展示了导航栏中的所有版块名称,下方显示了所有帖子列表,并且右上方显示了登录用户的信息,与预期一致。
场景4:登录状态下,点击导航栏中的版块名“Java”。
预期结果:系统应该展示 Java 版块的名称,该版块下的帖子数量,以及该版块下的所有帖子列表,并且右上方应该显示登录用户的信息。
实际结果:系统确实展示了 Java 版块的名称和帖子数量,同时显示了该版块下的所有帖子列表,并且右上方也显示了登录用户的信息,与预期一致。场景5:登录状态下,点击“月亮”按钮。
预期结果:系统应该进入夜间模式的切换。
实际结果:系统确实执行了夜间模式的切换操作,但是图标显示不正常。场景6:登录状态下,点击“发布帖子”按钮。
预期结果:系统应该进入帖子编辑页面,且版块名默认选择 Java。
实际结果:系统确实进入了帖子编辑页面,并且版块名默认选择了 Java,符合预期。
- 对编辑界面测试
场景1:未登录状态下(登录过期),尝试进入编辑页面。
预期结果:系统应该自动跳转回登录界面,要求用户重新登录。
实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。
场景2:在登录状态下,发布帖子时不输入帖子标题,只输入帖子内容,然后点击发布按钮。
预期结果:系统应该给出提示,要求用户输入帖子标题。
实际结果:系统确实给出了提示,要求用户输入帖子标题,与预期一致。
场景3:登录状态下,输入了帖子标题但没有输入帖子内容,然后点击发布按钮。
预期结果:系统应该给出提示,要求用户输入帖子内容。
实际结果:系统确实给出了提示,要求用户输入帖子内容,与预期一致。场景4:登录状态下,输入了帖子标题和帖子内容,然后点击发布按钮。
预期结果:系统应该成功编辑帖子,并跳转回首页,最上方应该显示刚发布的帖子信息。
实际结果:系统确实执行了编辑成功的操作,跳转回了首页,并在最上方显示了刚发布的帖子信息,与预期一致。
- 对帖子详情页面进行的测试
场景1:未登录或者登录过期的状态下,点击首页中的任意一条帖子内容。
预期结果:系统应该自动跳转回登录界面,要求用户重新登录。
实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。
场景2:登录状态下,点击首页中的一条帖子内容–作者和登录用户不一样。
预期结果:系统应该跳转到该帖子的详情页面。
实际结果:系统确实跳转到了该帖子的详情页面。
场景3:登录状态下,点击首页中的一条帖子内容–作者和登录用户不一样。
预期结果:系统应该跳转到该帖子的详情页面,最上方应该显示该帖子的信息,左侧应该显示帖子作者的信息,下方应该显示该帖子的内容,而下方应该只显示点赞按钮。
实际结果:系统确实展示了预期的内容,包括帖子信息、作者信息、帖子内容以及点赞按钮,与预期一致。
场景4:登录状态下,点击帖子详情页面上的点赞按钮。
预期结果:应该看到上方显示的点赞数加1。
实际结果:系统确实执行了点赞操作,上方显示的点赞数加1,与预期一致。
场景5:登录状态下,点击首页中的一条帖子内容–作者和当前登录用户一样。
预期结果:系统应该跳转到该帖子的详情页面,最上方应该显示该帖子的信息,左侧应该显示帖子作者的信息,下方应该显示该帖子的内容,而下方应该显示点赞按钮、删除按钮和编辑按钮。
实际结果:系统确实展示了预期的内容,包括帖子信息、作者信息、帖子内容以及点赞按钮、删除按钮和编辑按钮,与预期一致。场景6:登录状态下,点击首页中的一条帖子内容,然后观察帖子信息中的访问数变化。
预期结果:系统应该跳转到该帖子的详情页面,最上方应该显示帖子信息中的访问数+1。
实际结果:系统确实执行了跳转到帖子详情页面的操作,并且观察到帖子信息中的访问数确实增加了1,与预期一致。
场景7:登录状态下,点击发私信按钮,然后不输入文本内容,直接点击“发送”按钮。
预期结果:系统应该给出警告提示,要求用户输入要发送的内容。
实际结果:系统确实给出了警告提示,要求用户输入要发送的内容,与预期一致。场景8:登录状态下,点击发私信按钮,然后输入文本内容,最后点击“发送”按钮。
预期结果:系统应该给出成功提示,提示私信发送成功。
实际结果:系统确实给出了成功提示,显示私信发送成功,与预期一致。## 1. 手动功能测试
- 对注册页面进行的测试
场景1:在输入部分注册信息时,由于信息不全,点击注册按钮后系统应该给出相应的提示。
预期结果:页面提示部分信息不能为空。
实际结果:系统确实给出了相应的提示,要求补全所有必填项,与预期一致。
场景2:输入一个不存在的用户名,并且输入密码与确认密码不一致,然后点击注册按钮。
预期结果:系统应该提示用户检查确认密码是否输入一致。
实际结果:系统确实给出了相应的提示,指示用户检查确认密码,与预期结果一致。
场景3:输入一个已经存在的用户名,并确保密码和确认密码一致,然后点击注册按钮。
预期结果:系统应该提示用户该用户名已经存在。
实际结果:系统确实给出了提示,提示用户该用户名已经存在,与预期结果一致。
场景4:输入一个不存在的用户名,同时确保密码和确认密码一致,然后点击注册按钮。
预期结果:系统应该显示注册成功,并跳转回登录界面。
实际结果:系统确实显示了注册成功,并且跳转回了登录界面,符合预期。
- 对登录页面进行的测试
场景1:输入一个已经存在的用户名,并确保密码输入正确,然后点击登录按钮。
预期结果:系统应该显示登录成功,并跳转到论坛首页。
实际结果:系统确实显示了登录成功,并且跳转到了论坛首页,与预期结果一致。
场景2:输入一个已经存在的用户名,并且输入错误的密码,然后点击登录按钮。
预期结果:系统应该显示登录失败,并给出相应的错误提示。
实际结果:系统确实显示了登录失败,并给出了错误提示,符合预期。
场景3:输入一个不存在的用户名,然后点击登录按钮。
预期结果:系统应该显示登录失败,并给出相应的错误提示。
实际结果:系统确实显示了登录失败,并给出了错误提示,符合预期。
- 对首页进行测试
场景1:在未登录或登录过期的状态下,点击首页链接或手动输入首页地址。
预期结果:系统应该自动跳转回登录界面,要求用户重新登录。
实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。
场景2:在未登录状态下录或登录过期的状态下,点击首页中的任意一条帖子内容。
预期结果:系统应该自动跳转回登录界面,要求用户重新登录。
实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。
场景3:登录状态下,点击“首页”按钮。
预期结果:应该显示导航栏中的所有版块名称,下方应显示所有帖子列表,并且右上方应该显示登录用户的信息。
实际结果:系统确实展示了导航栏中的所有版块名称,下方显示了所有帖子列表,并且右上方显示了登录用户的信息,与预期一致。
场景4:登录状态下,点击导航栏中的版块名“Java”。
预期结果:系统应该展示 Java 版块的名称,该版块下的帖子数量,以及该版块下的所有帖子列表,并且右上方应该显示登录用户的信息。
实际结果:系统确实展示了 Java 版块的名称和帖子数量,同时显示了该版块下的所有帖子列表,并且右上方也显示了登录用户的信息,与预期一致。场景5:登录状态下,点击“月亮”按钮。
预期结果:系统应该进入夜间模式的切换。
实际结果:系统确实执行了夜间模式的切换操作,但是图标显示不正常。场景6:登录状态下,点击“发布帖子”按钮。
预期结果:系统应该进入帖子编辑页面,且版块名默认选择 Java。
实际结果:系统确实进入了帖子编辑页面,并且版块名默认选择了 Java,符合预期。
- 对编辑界面测试
场景1:未登录状态下(登录过期),尝试进入编辑页面。
预期结果:系统应该自动跳转回登录界面,要求用户重新登录。
实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。
场景2:在登录状态下,发布帖子时不输入帖子标题,只输入帖子内容,然后点击发布按钮。
预期结果:系统应该给出提示,要求用户输入帖子标题。
实际结果:系统确实给出了提示,要求用户输入帖子标题,与预期一致。
场景3:登录状态下,输入了帖子标题但没有输入帖子内容,然后点击发布按钮。
预期结果:系统应该给出提示,要求用户输入帖子内容。
实际结果:系统确实给出了提示,要求用户输入帖子内容,与预期一致。场景4:登录状态下,输入了帖子标题和帖子内容,然后点击发布按钮。
预期结果:系统应该成功编辑帖子,并跳转回首页,最上方应该显示刚发布的帖子信息。
实际结果:系统确实执行了编辑成功的操作,跳转回了首页,并在最上方显示了刚发布的帖子信息,与预期一致。
- 对帖子详情页面进行的测试
场景1:未登录或者登录过期的状态下,点击首页中的任意一条帖子内容。
预期结果:系统应该自动跳转回登录界面,要求用户重新登录。
实际结果:系统确实执行了跳转回登录界面的操作,与预期一致。
场景2:登录状态下,点击首页中的一条帖子内容–作者和登录用户不一样。
预期结果:系统应该跳转到该帖子的详情页面。
实际结果:系统确实跳转到了该帖子的详情页面。
场景3:登录状态下,点击首页中的一条帖子内容–作者和登录用户不一样。
预期结果:系统应该跳转到该帖子的详情页面,最上方应该显示该帖子的信息,左侧应该显示帖子作者的信息,下方应该显示该帖子的内容,而下方应该只显示点赞按钮。
实际结果:系统确实展示了预期的内容,包括帖子信息、作者信息、帖子内容以及点赞按钮,与预期一致。
场景4:登录状态下,点击帖子详情页面上的点赞按钮。
预期结果:应该看到上方显示的点赞数加1。
实际结果:系统确实执行了点赞操作,上方显示的点赞数加1,与预期一致。
场景5:登录状态下,点击首页中的一条帖子内容–作者和当前登录用户一样。
预期结果:系统应该跳转到该帖子的详情页面,最上方应该显示该帖子的信息,左侧应该显示帖子作者的信息,下方应该显示该帖子的内容,而下方应该显示点赞按钮、删除按钮和编辑按钮。
实际结果:系统确实展示了预期的内容,包括帖子信息、作者信息、帖子内容以及点赞按钮、删除按钮和编辑按钮,与预期一致。场景6:登录状态下,点击首页中的一条帖子内容,然后观察帖子信息中的访问数变化。
预期结果:系统应该跳转到该帖子的详情页面,最上方应该显示帖子信息中的访问数+1。
实际结果:系统确实执行了跳转到帖子详情页面的操作,并且观察到帖子信息中的访问数确实增加了1,与预期一致。
场景7:登录状态下,点击发私信按钮,然后不输入文本内容,直接点击“发送”按钮。
预期结果:系统应该给出警告提示,要求用户输入要发送的内容。
实际结果:系统确实给出了警告提示,要求用户输入要发送的内容,与预期一致。场景8:登录状态下,点击发私信按钮,然后输入文本内容,最后点击“发送”按钮。
预期结果:系统应该给出成功提示,提示私信发送成功。
实际结果:系统确实给出了成功提示,显示私信发送成功,与预期一致。
场景9:登录状态下,在下方的评论框中不输入文本内容,然后点击“回复”按钮。
预期结果:系统应该给出警告提示,提示用户输入回复内容。
实际结果:系统确实给出了警告提示,要求用户输入回复内容,与预期一致。
场景10:登录状态下,在下方的回复框中输入文本内容,然后点击“回复”按钮。
预期结果:系统应该给出成功提示,同时在下方显示评论内容,并清空回复框中的内容。
实际结果:系统确实成功进行了评论,回复框中的内容被清空,与预期一致。
- 对个人中心进行测试
场景1:登录状态下,点击“我的帖子”按钮。
预期结果:系统应该显示下方所有属于该登录用户的帖子信息。
实际结果:系统确实展示了预期的结果,显示了属于该登录用户的所有帖子信息,与预期一致。
场景2:登录状态下,先发布新贴,然后点击“我的帖子”按钮,查看发帖子数。
预期结果:系统应该即时更新,下方显示该登录用户的所有帖子的数量应该和上方显示的发帖数一致。
实际结果:发帖数并没有即时更新,可能是系统在更新发帖数方面存在延迟或者需要手动刷新页面才能更新,与预期不符。
场景三:登录状态下,点击“个人中心”按钮。
预期结果:系统应该显示下方该登录用户的个人信息。
实际结果:系统确实展示了预期的结果,显示了该登录用户的个人信息,与预期一致。
场景4:登录状态下,尝试进行修改头像操作。
预期结果:应该打开电脑,上传本地图片,然后点击修改头像按钮成功修改。
实际结果:虽然上传本地图片成功,但点击修改头像按钮时没有反应,与预期不符。(项目目前未实现修改头像)。
场景5:登录状态下,尝试进行修改昵称操作。
预期结果:应该输入修改后的昵称,并且修改成功后页面能够刷新,显示新的昵称。
实际结果:系统确实执行了修改昵称的操作,并且修改成功后页面进行了刷新,显示了新的昵称,与预期一致。
场景6:登录状态下,尝试进行修改密码操作:输入的原密码错误,但新密码和确认密码一致,然后点击修改密码按钮。
预期结果:系统应该给出警告提示,提示参数校验失败。
实际结果:系统确实给出了警告提示,提示参数校验失败,与预期一致。场景7:登录状态下,尝试进行修改密码操作:输入的原密码正确,但新密码和确认密码不一致,然后点击修改密码按钮。
预期结果:系统应该给出警告提示,提示两次输入的密码不一致。
实际结果:系统确实给出了警告提示,提示两次输入的密码不一致,与预期一致.
场景8:登录状态下,尝试进行修改密码操作:输入的原密码正确,新密码和确认密码一致,然后点击修改密码按钮。
预期结果:系统应该跳转回登录界面,并要求用户重新登录。
实际结果:系统确实执行了跳转回登录界面的操作,并要求用户重新登录,与预期一致。
2. 自动化测试
2.1 初始化工具类
这部分代码是为了在测试过程中创建浏览器驱动,并提供了截图功能来记录测试执行的结果。
- 单例驱动
自动化测试程序过程中,会频繁的使用驱动。如果频繁的创建和销毁,开销还是比较大的,因此我们可以使用懒汉模式加载驱动。这样可以保证驱动不会频繁创建程序在运行过程中会保持单例,能减轻程序刚开始启动时的系统开销,因为只有用到驱动是才会加载它。如果其他类需要使用到驱动的话,直接继承该类即可。- 获取屏幕截图
当我们测试用例出错时,我们需要查看当时网页出现的情况,那么就需要使用屏幕截图来排查问题,我们可以使用 getScreenshot方法来保存屏幕截图,在每个测试用例执行完后进行一次屏幕截图,屏幕截图统一保存到一个路径下,文件名和当前时间去组织(防止保存屏幕截图出现覆盖情况)。
/**
* @author ALL
* @description: 公共类:创建driver驱动对象,屏幕截图
*/
public class UtilsDriver {
public static WebDriver driver;
//创建driver对象
public static WebDriver createDriver() {
if (driver == null) {
//驱动管理打开chrome浏览器
WebDriverManager.chromedriver().setup();
//对chrome浏览器进行设置
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
driver = new ChromeDriver(options);
//全局隐式等待
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
}
return driver;
}
public UtilsDriver(String url){
driver=createDriver();
driver.get(url);
}
//屏幕截图
public void getScreenShot(String str) throws IOException {
SimpleDateFormat sim1=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sim2=new SimpleDateFormat("HHmmssSS");
String dirTime= sim1.format(System.currentTimeMillis());
String fileTime= sim2.format(System.currentTimeMillis());
String filename="./src/test/image/"+dirTime+"/"+str+"-"+fileTime+".png";
File srcFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcFile,new File(filename));
}
}
}
2.2 注册页面测试
验证注册界面正常显示:通过检查页面元素是否成功找到判断能否正常显示页面。
验证注册成功:
场景:注册用户名在数据库中不存在,昵称正常输入,两次密码输入一致,执行注册操作后,预期注册成功并跳转回登录页面。
/**
* @author ALL
* @description: 注册界面自动化测试
*/
public class SignUpPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/sign-up.html";
public SignUpPage(){
super(url);
}
//检查页面是否加载成功
public void SignUpPageRight() throws IOException {
//检查页面元素来判断是否加载成功
driver.findElement(By.cssSelector("#signUpForm > div"));
driver.findElement(By.cssSelector("#username"));
driver.findElement(By.cssSelector("#nickname"));
driver.findElement(By.cssSelector("#submit"));
driver.findElement(By.cssSelector("body > div > div > div.text-center.text-muted.mt-3"));
getScreenShot(getClass().getName());
}
//正常注册
public void SignUpSuc() throws IOException {
//1.清空输入框数据--通过浏览器refresh刷新来清空数据
driver.navigate().refresh();
//2.输入不存在于数据库中的用户名、昵称,并输入两次相同的密码
driver.findElement(By.cssSelector("#username")).sendKeys("张三2");
driver.findElement(By.cssSelector("#nickname")).sendKeys("张三2");
driver.findElement(By.cssSelector("#password")).sendKeys("123456");
driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123456");
driver.findElement(By.cssSelector("#policy")).click();
//3.检查点击注册之后有没有跳转到登录界面
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 方式一.检查元素
driver.findElement(By.cssSelector("body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//方式二.检查页面标题
String title=driver.getTitle();
assert title.equals("论坛-用户登录");
System.out.println("注册成功");
getScreenShot(getClass().getName());
//4.注册状态的回退--浏览器的回退功能back
driver.navigate().back();
}
//异常注册-全部都不为空-用户在数据库已存在--检查弹窗以及弹窗内容是否正确
public void SignUpFalse1() throws IOException, InterruptedException {
//1.清空输入框数据--通过浏览器refresh刷新来清空数据
driver.navigate().refresh();
Thread.sleep(3000);
//2.输入存在于数据库中的用户名、昵称,并输入两次相同的密码
driver.findElement(By.cssSelector("#username")).sendKeys("admin");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#nickname")).sendKeys("admin");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#password")).sendKeys("123456");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123456");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#policy")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//3.检查点击注册之后有没有提醒弹窗
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//屏幕弹窗-用户已经存在
//1.显示等待获取资源
WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(3));
//检查页面的dom是否存在元素
WebElement ele=wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")));
//2.获取toast:判断toast文字是否正确
//方法一:textToBePresentInElement 模糊匹配text
wait.until(ExpectedConditions.textToBePresentInElement(ele,"用户已存在"));
//方法二:使用getText再assert
String str=driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();
assert str.contains("用户已存在");
//屏幕截图
getScreenShot(getClass().getName());
driver.navigate().refresh();
driver.quit();
}
//跳转到登录界面-检查能否跳转成功
public void SkipSignIn() throws IOException {
//点击登录跳转
driver.findElement(By.cssSelector("body > div > div > div.text-center.text-muted.mt-3 > a")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.navigate().back();
}
}
2.3 登录界面测试
/**
* @author ALL
* @description: 注册界面自动化测试
*/
public class SignUpPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/sign-up.html";
public SignUpPage(){
super(url);
}
//检查页面是否加载成功
public void SignUpPageRight() throws IOException {
//检查页面元素来判断是否加载成功
driver.findElement(By.cssSelector("#signUpForm > div"));
driver.findElement(By.cssSelector("#username"));
driver.findElement(By.cssSelector("#nickname"));
driver.findElement(By.cssSelector("#submit"));
driver.findElement(By.cssSelector("body > div > div > div.text-center.text-muted.mt-3"));
getScreenShot(getClass().getName());
}
//正常注册
public void SignUpSuc() throws IOException {
//1.清空输入框数据--通过浏览器refresh刷新来清空数据
driver.navigate().refresh();
//2.输入不存在于数据库中的用户名、昵称,并输入两次相同的密码
driver.findElement(By.cssSelector("#username")).sendKeys("张三2");
driver.findElement(By.cssSelector("#nickname")).sendKeys("张三2");
driver.findElement(By.cssSelector("#password")).sendKeys("123456");
driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123456");
driver.findElement(By.cssSelector("#policy")).click();
//3.检查点击注册之后有没有跳转到登录界面
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 方式一.检查元素
driver.findElement(By.cssSelector("body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//方式二.检查页面标题
String title=driver.getTitle();
assert title.equals("论坛-用户登录");
System.out.println("注册成功");
getScreenShot(getClass().getName());
//4.注册状态的回退--浏览器的回退功能back
driver.navigate().back();
}
//异常注册-全部都不为空-用户在数据库已存在--检查弹窗以及弹窗内容是否正确
public void SignUpFalse1() throws IOException, InterruptedException {
//1.清空输入框数据--通过浏览器refresh刷新来清空数据
driver.navigate().refresh();
Thread.sleep(3000);
//2.输入存在于数据库中的用户名、昵称,并输入两次相同的密码
driver.findElement(By.cssSelector("#username")).sendKeys("admin");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#nickname")).sendKeys("admin");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#password")).sendKeys("123456");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123456");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#policy")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//3.检查点击注册之后有没有提醒弹窗
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//屏幕弹窗-用户已经存在
//1.显示等待获取资源
WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(3));
//检查页面的dom是否存在元素
WebElement ele=wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")));
//2.获取toast:判断toast文字是否正确
//方法一:textToBePresentInElement 模糊匹配text
wait.until(ExpectedConditions.textToBePresentInElement(ele,"用户已存在"));
//方法二:使用getText再assert
String str=driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();
assert str.contains("用户已存在");
//屏幕截图
getScreenShot(getClass().getName());
driver.navigate().refresh();
driver.quit();
}
//跳转到登录界面-检查能否跳转成功
public void SkipSignIn() throws IOException, InterruptedException {
//点击登录跳转
driver.findElement(By.cssSelector("body > div > div > div.text-center.text-muted.mt-3 > a")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//检查是否会自动跳转到登录界面
Thread.sleep(3000);
String title=driver.getTitle();
//屏幕截图
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.navigate().back();
}
}
2.4 显示帖子列表测试
2.4.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.4.2 登录状态下测试
//显示帖子列表 成功登陆状态下:1.页面成功加载,点击首页,能显示所有帖子;2.点击其他板块能正常切换,同时显示对应版块下帖子以及帖子数量
public void IndexPageRight() throws IOException, InterruptedException {
//1.页面成功加载,点击首页,能显示所有帖子
driver.navigate().refresh();
driver.findElement(By.cssSelector("#nav_board_index > a > span.nav-link-title")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
driver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div > div > div"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
List<WebElement> Number= driver.findElements(By.cssSelector("#bit-forum-content > div.page-body > div > div > div > div > div > div > div"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//当帖子数不为0,查看帖子是否正常显示
if(Number.size()!=0){
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col > ul > li:nth-child(1)"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col > ul > li:nth-child(2)"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
}
System.out.println("首页帖子列表能正常显示");
//2.点击其他板块能正常切换,同时显示对应版块下帖子以及帖子数量
driver.navigate().refresh();
Thread.sleep(3000);
//通过测试其他板块页面元素来测试能正常切换
driver.findElement(By.cssSelector("#topBoardList > li:nth-child(4) > a > span.nav-link-title")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String text1=driver.findElement(By.cssSelector("#topBoardList > li.nav-item.active > a > span.nav-link-title")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String title1=driver.findElement(By.cssSelector("#article_list_board_title")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
assert text1.equalsIgnoreCase(title1);
//同时能显示对应版块下帖子以及帖子数量
driver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div > div > div"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int rowNumber= driver.findElements(By.cssSelector("#bit-forum-content > div.page-body > div > div > div > div > div > div > div")).size();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
System.out.println("rowNumber:"+rowNumber);
//帖子数量: 2
String sub=driver.findElement(By.xpath("//*[@id=\"article_list_count_board\"]")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int num=(int)sub.charAt(sub.length()-1)-(int)('0');
System.out.println("num:"+num);
assert rowNumber==num;
System.out.println("其他板块帖子列表正常显示");
//截图保存结果
getScreenShot(getClass().getName());
//显示帖子列表页面的回退
driver.navigate().refresh();
}
2.5 查看帖子内容测试
2.5.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.5.2 登录状态下测试
//查看帖子--点击列表中帖子可以正常显示帖子内容,且帖子下留言个数和上方显示留言个数一致
public void ViewPostRight() throws IOException, InterruptedException {
driver.navigate().refresh();
Thread.sleep(3000);
//1.点击帖子正常显示帖子内容
//点击板块java,看是否有帖子
driver.findElement(By.cssSelector("#topBoardList > li:nth-child(2) > a")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div > div > div"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int sum=driver.findElements(By.cssSelector("#bit-forum-content > div.page-body > div > div > div > div > div > div > div")).size();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//2.如果有帖子
if(sum!=0) {
//1).点击帖子内容"1312",博客作者和登录作者不同,只显示点赞功能和发私信功能
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(2) > div > div.col > div.text-truncate > a > strong")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
//看帖子详情页 标题是否正确,是否有点赞按钮
String expect="test";
String act= driver.findElement(By.xpath("//*[@id=\"details_article_title\"]")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String expect2="点赞";
String act2= driver.findElement(By.cssSelector("#details_btn_like_count")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
System.out.println(act);
System.out.println(act2);
assert expect.equals(act);
assert expect2.equals(act2);
//1.发私信功能正常
//点击发送私信,成功转到发私信
driver.findElement(By.xpath("//*[@id=\"btn_details_send_message\"]")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
//检查元素
driver.findElement(By.cssSelector("#index_message_modal > div > div > div.modal-header > h5"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String text = driver.findElement(By.cssSelector("#index_message_modal > div > div > div.modal-header")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
System.out.println("text:"+text);
assert text.equals("发送站内信");
//点击取消
driver.findElement(By.xpath("//*[@id=\"index_message_receive_cancel\"]")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
//2.留言数量与上方显示一致
String str = driver.findElement(By.xpath("//*[@id=\"details_article_replyCount\"]")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int num = Integer.parseInt(str);
int mesNum=driver.findElements(By.xpath("//*[@id=\"details_reply_area\"]/div")).size();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保持
getScreenShot(getClass().getName());
assert num==mesNum;
// 帖子内容
System.out.println(driver.findElement(By.cssSelector("#details_article_title")).getText());
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 帖子作者
System.out.println(driver.findElement(By.cssSelector("#article_details_author_name")).getText());
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//点击回到首页
driver.findElement(By.cssSelector("#nav_board_index > a > span.nav-link-title")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(8000);
//2)点击帖子"标题不为空",博客作者和登陆作者一致,不显示发送私信,显示点赞,编辑,删除按钮
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String expect3="标题不为空";
String act3= driver.findElement(By.xpath("//*[@id=\"details_article_title\"]")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String expect4="点赞";
String act4= driver.findElement(By.cssSelector("#details_btn_like_count")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String expect5="编辑";
String act5=driver.findElement(By.cssSelector("#details_artile_edit > span")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String expect6="删除";
String act6=driver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a > span")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存
getScreenShot(getClass().getName());
assert expect3.equals(act3);
assert expect4.equals(act4);
assert expect5.equals(act5);
assert expect6.equals(act6);
// 帖子内容
System.out.println(driver.findElement(By.cssSelector("#details_article_content > p")).getText());
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 帖子作者
System.out.println(driver.findElement(By.cssSelector("#article_details_author_name")).getText());
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
System.out.println("查看帖子列表显示正确");
driver.quit();
}
}
2.6 发布帖子测试
2.6.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.6.2 登录状态下测试
场景一:发布帖子失败
//发布帖子失败--标题为空-测试是否出现弹窗提示,同时弹窗里面的数据是不是:请输入帖子标题/内容
public void PublishPostFalse() throws InterruptedException {
//1)点击发布帖子正常转到发布帖子界面
driver.navigate().refresh();
Thread.sleep(3000);
//1.在首页,点击发布帖子转到发布帖子界面
driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//检查标题是否是发新帖
String title=driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//getScreenShot(getClass().getName());
assert title.equals("发新贴");
//2)标题为空情况下发布失败,给出错误提示
//发布帖子界面
//1.1.只编辑博客内容不写标题-鼠标操作
WebElement content=driver.findElement(By.cssSelector("#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll > div.CodeMirror-sizer > div"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
new Actions(driver).click(content).sendKeys("内容不为空,标题为空").perform();
//1.2.点击发布按钮
//发布按钮元素在底部
Thread.sleep(3000);
new WebDriverWait(driver,Duration.ofSeconds(5)).until(ExpectedConditions.elementToBeClickable(By.cssSelector("#bit-forum-content > div.page-body > div > div > div.card-footer.bg-transparent.mt-auto>div>a")));
WebElement post=driver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div.card-footer.bg-transparent.mt-auto>div>a"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//使用js直接执行点击发布按钮
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", post);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//post.click();
//1.3.检查弹窗
driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//查看toast中内容是否一致--请输入帖子标题
String except=driver.findElement(By.xpath("/html/body/div[4]/div")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
assert except.contains("请输入帖子标题");
System.out.println("发送帖子失败页面显示正确");
// driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > span.close-jq-toast-single")).click();
driver.navigate().refresh();
}
场景二:发布帖子成功
//发布帖子成功--标题和内容都不为空,发布成功,跳转回首页,最上方显示新增的帖子,且对应版块下的帖子数量更新
//选择不同的版块发布,每个版块都正常更新
public void PublishPostSuc() throws InterruptedException {
driver.navigate().refresh();
//1.点击mysql模块,记录帖子数量
driver.findElement(By.cssSelector("#topBoardList > li:nth-child(5) > a")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
String sub=driver.findElement(By.xpath("//*[@id=\"article_list_count_board\"]")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int num=(int)sub.charAt(sub.length()-1)-(int)('0');
//2.点击发布帖子
driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
//3.检查标题是否是发新帖
String tle=driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//getScreenShot(getClass().getName());
assert tle.equals("发新贴");
//4.写板块和标题和内容
//选择mysql板块
driver.findElement(By.cssSelector("#article_post_borad > option:nth-child(4)")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String title="标题不为空";
driver.findElement(By.xpath("//*[@id=\"article_post_title\"]")).sendKeys(title);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
WebElement content=driver.findElement(By.cssSelector("#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll > div.CodeMirror-sizer > div"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
new Actions(driver).click(content).sendKeys("内容不为空").perform();
//5.点击发布
Thread.sleep(2000);
new WebDriverWait(driver,Duration.ofSeconds(5)).until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"article_post_submit\"]")));
WebElement post=driver.findElement(By.xpath("//*[@id=\"article_post_submit\"]"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//使用js直接执行点击发布按钮
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", post);
//6.关闭弹窗
driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > h2"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String toast=driver.findElement(By.xpath("/html/body/div[4]/div")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
assert toast.contains("发帖成功");
driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > span.close-jq-toast-single")).click();
//7.跳转到首页
String ele=driver.findElement(By.xpath("//*[@id=\"article_list_board_title\"]")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
assert ele.equals("首页");
//---查看是否正常跟新板块
//8.查看首页是否更新帖子
String except=driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
assert except.equals(title);
//9.查看mysql板块是否更新成功
driver.findElement(By.cssSelector("#topBoardList > li:nth-child(5) > a")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
String exceptM=driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
assert exceptM.equals(title);
//10.查看mysql帖子数量是否更新
String subAft=driver.findElement(By.xpath("//*[@id=\"article_list_count_board\"]")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int numAft=(int)subAft.charAt(subAft.length()-1)-(int)('0');
assert numAft-num==1;
System.out.println("发布帖子成功功能显示正确");
}
2.7 删除帖子测试
2.7.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.7.2 登录状态下测试
//成功删除自己帖子:点击删除按键会弹出一个确认删除的框,点叉号/取消就会取消删除操作,取消后帖子依日存在,点击确定后,帖子会进行删除
//用户状态正常,帖子状态正常,删除成功,对应板块数量和我的帖子页面数量会减少
public void DeletePostSuc() throws IOException, InterruptedException {
//记录我的帖子界面数量
// 点击头像,再点击我的帖子,跳转到个人中心页面
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
Thread.sleep(1000);
driver.findElement(By.cssSelector("#index_user_profile")).click();
Thread.sleep(5000);
int num2Bef=Integer.valueOf(driver.findElement(By.cssSelector("#profile_articleCount")).getText());
//1.点击mysql板块中的帖子,进入帖子详情页
driver.navigate().refresh();
//点击mysql板块--进入帖子列表页
driver.findElement(By.cssSelector("#topBoardList > li:nth-child(5) > a")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
//记录删除前的mysql板块帖子数量
String bef2=driver.findElement(By.xpath("//*[@id=\"article_list_count_board\"]")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int numBef=(int)bef2.charAt(bef2.length()-1)-(int)('0');
//点击帖子--进入帖子详情页
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
//记录删除前的元素
String bef1=driver.findElement(By.cssSelector("#details_article_title")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//2.在详情页点击删除按钮--删除确认弹窗
driver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div:nth-child(1) > div.col-9.card.card-lg > div.card-footer.bg-transparent.mt-auto.justify-content-end > div > div:nth-child(3) > div > a > span")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
//3.点击取消,帖子依然存在
driver.findElement(By.cssSelector("#details_delete_modal > div > div > div.modal-footer > div > div > div:nth-child(1) > a")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(1000);
//验证元素仍然存在
String aft1=driver.findElement(By.cssSelector("#details_article_title")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
assert aft1.equals(bef1);
//4.点击删除,帖子会删除
//ElementNotInteractableException
WebElement post=driver.findElement(By.cssSelector("#details_artile_delete"));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", post);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//验证弹出提示:删除成功
String expect= "删除成功";
String act=driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
getScreenShot(getClass().getName());
System.out.println(act);
assert act.contains(expect);
//关闭弹窗
driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div > span.close-jq-toast-single")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//5.验证帖子列表第一条帖子的标题是不是已更新为新的值
Thread.sleep(3000);
String expect2="标题不为空";
String act2=driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
getScreenShot(getClass().getName());
assert expect2.contains(act2);
//6.对应的板块帖子数量减少1
//点击mysql板块
driver.navigate().refresh();
driver.findElement(By.cssSelector("#topBoardList > li:nth-child(5) > a")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
//记录数量比较
String aft2=driver.findElement(By.xpath("//*[@id=\"article_list_count_board\"]")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int numAft=(int)aft2.charAt(aft2.length()-1)-(int)('0');
assert numBef-numAft==1;
//7.我的帖子页面数量减少1
// 点击头像,再点击我的帖子,跳转到个人中心页面
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
Thread.sleep(1000);
driver.findElement(By.cssSelector("#index_user_profile")).click();
Thread.sleep(10000);
int num2Aft=Integer.valueOf(driver.findElement(By.cssSelector("#profile_articleCount")).getText());
System.out.println(num2Aft+"之前:"+num2Bef);
System.out.println("删除帖子功能正确");
}
2.8 编辑帖子测试
2.8.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.8.2 登录状态下测试
//编辑帖子 修改登录用户自己的帖子,修改标题和内容,重新发布,查看帖子内容是否更新
public void UpdatePost() throws InterruptedException, IOException {
driver.navigate().refresh();
// 1.点击帖子内容
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//2.点击编辑按钮,跳转到编辑页
driver.findElement(By.cssSelector("#details_artile_edit > span")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//3.编辑帖子
// 清空标题
driver.findElement(By.cssSelector("#edit_article_title")).clear();
// 更新标题为“编辑标题”
driver.findElement(By.cssSelector("#edit_article_title")).sendKeys("编辑标题");
// 正文加样式表示修改
driver.findElement(By.cssSelector("#edit_article_content_area > div.editormd-toolbar > div > ul > li:nth-child(6) > a > i")).click();
driver.findElement(By.cssSelector("#edit_article_content_area > div.editormd-toolbar > div > ul > li:nth-child(7) > a > i")).click();
//4.点击提交按钮
WebElement element = driver.findElement(By.cssSelector("#edit_article_submit"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().perform();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//修改提交后跳转到主页
//5. 检查标题是否更新
Thread.sleep(3000);
String expect = "编辑标题";
String act = driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//6.截图保存测试结果
String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
getScreenShot(getClass().getName());
assert expect.equals(act);
driver.quit();
System.out.println("编辑帖子功能正确");
}
2.9 点赞帖子测试
2.9.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.9.2 登录状态下测试
//点赞帖子--登录后,该帖子状态正常,点赞成功,上方的点赞数会相应增加
public void LikePost() throws InterruptedException, IOException {
driver.navigate().refresh();
// 1.点击帖子内容,进入该帖内容页,找到点赞按钮并点击
//点击帖子
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
// 获取点赞前的点赞数
String cur = driver.findElement(By.cssSelector("#details_article_likeCount")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int Cur=Integer.valueOf(cur);
System.out.println(cur);
// 点击点赞按钮
driver.findElement(By.cssSelector("#details_btn_like_count")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
// 获取点赞后的点赞数
String after = driver.findElement(By.cssSelector("#details_article_likeCount")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int After=Integer.valueOf(after);
System.out.println(after);
// 截图保存测试结果
getScreenShot(getClass().getName());
// 验证点赞数是否增加
assert After-Cur==1;
driver.quit();
System.out.println("点赞帖子功能正确");
}
2.10 发布评论测试
2.10.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.10.2 登录状态下测试
//发布评论--评论内容为空,发布失败,给出错误提示
//评论内容不为空,发布成功,能正确显示,同时上方显示的评论数会相应增加
public void PublishComment() throws InterruptedException, IOException {
driver.navigate().refresh();
//1.点击帖子"标题不为空",进入帖子详情页
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
//2.回复框内编辑,内容为空
//直接点击回复
WebElement ele=driver.findElement(By.cssSelector("#details_btn_article_reply > span"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//使用 Actions 类可以模拟鼠标操作
Actions actions=new Actions(driver);
actions.moveToElement(ele).click().perform();
//弹窗提示:请输入回复内容
String expect1="请输入回复内容";
String act1=driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
getScreenShot(getClass().getName());
System.out.println("act1"+act1);
assert act1.contains(expect1);
Thread.sleep(3000);
//3.回复框内编辑,内容不为空
//记录当前评论数
String cur=driver.findElement(By.cssSelector("#details_article_replyCount")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int Cur=Integer.valueOf(cur);
System.out.println(Cur);
// //点击编辑框内任意按钮,就当编写内容了,但是更新效果看不明显
// driver.findElement(By.cssSelector("#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(6) > a > i")).click();
//或者使用action模拟鼠标操作
WebElement content=driver.findElement(By.cssSelector("#article_details_reply > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
String cont="评论内容不为空";
new Actions(driver).click(content).sendKeys(cont).perform();
Thread.sleep(10000);
//4.点击回复
WebElement ele2=driver.findElement(By.cssSelector("#details_btn_article_reply > span"));
actions.moveToElement(ele2).click().perform();
Thread.sleep(2000);
//5.弹窗提示:回复成功
String expect2="回复成功";
String act2=driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
getScreenShot(getClass().getName());
System.out.println("act2"+act2);
assert act2.contains(expect2);
//6.最新回复下第一条显示成功 TODO
String act3=driver.findElement(By.cssSelector("#details_reply_area > div:nth-child(1)")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
System.out.println("act3"+act3);
assert act3.contains(cont);
//7.上方评论数增加
//记录当前评论数
String after=driver.findElement(By.cssSelector("#details_article_replyCount")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
int After=Integer.valueOf(after);
System.out.println(After);
assert After-Cur==1;
System.out.println("发布评论功能正确");
}
2.11 我的帖子页面测试
2.11.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.11.2 登录状态下测试
//登录状态下,进入主页,点击我的帖子,跳转到个人中心页面,显示用户昵称等信息
public void myBlog() throws InterruptedException, IOException {
driver.navigate().refresh();
// -点击头像,再点击我的帖子,跳转到个人中心页面
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
Thread.sleep(1000);
driver.findElement(By.cssSelector("#index_user_profile")).click();
Thread.sleep(5000);
// 校验是否有用户昵称 是否 准确
String expect = "admin";
String act = driver.findElement(By.cssSelector("#profile_nickname")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 截图保存测试结果
getScreenShot(getClass().getName());
assert act.equals(expect);
System.out.println("我的帖子功能正确");
}
2.12 个人中心测试
2.12.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.12.2 个人中心页面显示正确
//个人中心--显示用户信息
public void UserInformationPageRight() throws InterruptedException, IOException {
driver.navigate().refresh();
//1).点击头像,再点击个人中心,跳转到个人中心页面,检查是否正确显示用户信息
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
Thread.sleep(1000);
driver.findElement(By.cssSelector("#index_user_settings")).click();
Thread.sleep(3000);
//是否有用户昵称
String expect1 = "admin1";
String act1 = driver.findElement(By.cssSelector("#settings_nickname")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//是否有“昵称”这两个字
String expect2 = "昵称";
String act2 = driver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(4)")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//是否有“邮箱地址”这几个字
String expect3 = "邮箱地址";
String act3 = driver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(7)")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//是否有“电话号码”这几个字
String expect4 = "电话号码";
String act4 = driver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(10)")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//是否有“修改密码”这几个字
String expect5 = "修改密码";
String act5 = driver.findElement(By.cssSelector(" #bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > h3:nth-child(13)")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//是否有“提交修改”按钮#settings_input_passwordRepeat
boolean b = driver.findElement(By.cssSelector("#settings_submit_password")).isDisplayed();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 获取昵称修改框中的内容
String expect6= "admin1";
String act6 = driver.findElement(By.cssSelector("#setting_input_nickname")).getAttribute("value");
Thread.sleep(3000);
// 截图保存测试结果
getScreenShot(getClass().getName());
assert expect1.equals(act1);
assert expect2.equals(act2);
assert expect3.equals(act3);
assert expect4.equals(act4);
assert expect5.equals(act5);
assert expect6.equals(act6);
System.out.println("个人中心页面显示正确");
driver.quit();
}
2.12.3 个人中心更改昵称测试
//更改昵称
public void ChangeNickname() throws InterruptedException, IOException {
driver.navigate().refresh();
//1).点击头像,再点击个人中心,跳转到个人中心页面
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
Thread.sleep(1000);
driver.findElement(By.cssSelector("#index_user_settings")).click();
Thread.sleep(3000);
//2).修改用户信息-昵称,看修改后的用户信息是否正常显示上去了
// 1.不修改内容,但点击修改按钮
driver.findElement(By.cssSelector("#setting_submit_nickname")).click();
//验证跳出警告弹窗:参数校验失败
String expect11="参数校验失败";
String act11=driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(2000);
getScreenShot(getClass().getName());
System.out.println("act11"+act11);
assert act11.contains(expect11);
Thread.sleep(8000);
//2.修改内容,点击修改按钮
// 清除昵称的文本内容
driver.findElement(By.cssSelector("#setting_input_nickname")).clear();
// 输入要修改的新昵称
String exceptNickName = "admin";
driver.findElement(By.cssSelector("#setting_input_nickname")).sendKeys(exceptNickName);
Thread.sleep(1000);
//点击修改按钮
driver.findElement(By.cssSelector("#setting_submit_nickname")).click();
//查看提示弹窗:
String expect12="操作成功";
String act12=driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
System.out.println("act12"+act12);
assert act12.contains(expect12);
Thread.sleep(3000);
//再次获取昵称,判断是不是修改后的昵称名
String afterNickName = driver.findElement(By.cssSelector("#settings_nickname")).getText();
System.out.println("修改后的昵称"+afterNickName);
assert afterNickName.equals(exceptNickName);
// 截图保存测试结果
getScreenShot(getClass().getName());
System.out.println("更改昵称功能正确");
}
2.12.4个人中心更改登录密码测试
//更改密码
public void ChangePassword() throws InterruptedException, IOException {
driver.navigate().refresh();
//1).点击头像,再点击个人中心,跳转到个人中心页面
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
Thread.sleep(1000);
driver.findElement(By.cssSelector("#index_user_settings")).click();
Thread.sleep(3000);
// 1.修改密码
//原密码 123456 正确,新密码 111111
String username="admin2";
String curPassword="123456";
String excPassword="111111";
//输入原密码
driver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys(curPassword);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//输入新密码
driver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys(excPassword);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//输入确认密码
driver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys(excPassword);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//2.点击 提交修改 按钮
// 使用 Actions 类可以模拟鼠标操作
WebElement element = driver.findElement(By.cssSelector("#settings_submit_password"));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().perform();
Thread.sleep(5000);
//3.判断是否返回登录界面
// 获取当前的url地址
String except = "http://127.0.0.1:58080/sign-in.html";
String act = driver.getCurrentUrl();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 截图保存测试结果
getScreenShot(getClass().getName());
assert except.equals(act);
System.out.println("密码修改成功!");
//4.判断原来的用户名和密码能否再次登录
// 输入用户名
driver.findElement(By.cssSelector("#username")).sendKeys(username);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 输入密码
driver.findElement(By.cssSelector("#password")).sendKeys(curPassword);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 点击登录按钮
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
//5.登录失败,出现警告提示
// 验证提示内容
String act2 = driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();
String except2 = "用户名或密码错误";
assert act2.contains(except2);
System.out.println("原密码登录失败!");
//6. 再用新密码进行登录
// 打开登录页面
driver.get("http://127.0.0.1:58080/sign-in.html");
// 输入用户名
driver.findElement(By.cssSelector("#username")).sendKeys(username);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 输入密码
driver.findElement(By.cssSelector("#password")).sendKeys(excPassword);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 点击登录按钮
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(5000);
//7.登录成功,跳转到主页
// 获取当前的url地址
String except3 = "http://127.0.0.1:58080/index.html";
String act3 = driver.getCurrentUrl();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 截图保存测试结果
getScreenShot(getClass().getName());
assert act3.equals(except3);
System.out.println("新密码登录成功!");
}
2.13 退出登录测试
2.13.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.13.2 登录状态下测试
//退出登录测试
public void LogOut() throws InterruptedException, IOException {
driver.navigate().refresh();
//点击头像,再点击退出,跳转到登录页面
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
Thread.sleep(1000);
driver.findElement(By.cssSelector("#index_user_logout")).click();
Thread.sleep(3000);
// 获取当前的url地址
String except = "http://127.0.0.1:58080/sign-in.html";
String act = driver.getCurrentUrl();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 截图保存测试结果
getScreenShot(getClass().getName());
assert except.equals(act);
System.out.println("退出成功!");
}
2.14 站内私信测试
2.14.1 未登录状态下测试
public class IndexPage extends UtilsDriver {
public static String url="http://127.0.0.1:58080/index.html";
public IndexPage(){super(url);}
//未登录状态--会自动跳转到登录界面
public void IndexPageNoLogin() throws IOException {
//检查是否会自动跳转到登录界面
String title=driver.getTitle();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
//截图保存结果
getScreenShot(getClass().getName());
assert title.equals("论坛 - 用户登录");
driver.quit();
}
2.14.2 登录状态下测试
//站内信功能测试--登录状态下,验证两个账号用户之间的站内信的发送和回复正常更新,站内信息状态的切换更新正常。
public void message() throws InterruptedException, IOException {
//admin发送私信给admin2,admin2回复私信给admin1
String username1="admin";
String password1="123456";
String username2="admin2";
String password2="123456";
// 1-登录发送站内信的账号
// 打开登录页面
driver.get("http://127.0.0.1:58080/sign-in.html");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 输入用户名
driver.findElement(By.cssSelector("#username")).sendKeys(username1);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 输入密码
driver.findElement(By.cssSelector("#password")).sendKeys(password1);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 点击登录按钮
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 2.点击作者是非当前用户a的一个帖子,点击帖子内容,进入该帖内容页
driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
// 3.点击发私信按钮,发送站内信
driver.findElement(By.cssSelector("#btn_details_send_message")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
// 在文本框中输入内容,发送站内信
String except1="用户admin发私信";
driver.findElement(By.cssSelector("#index_message_receive_content")).sendKeys(except1);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
// 点击发送按钮
driver.findElement(By.cssSelector("#btn_index_send_message")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
// 4.退出登录
// 点击头像,再点击退出,跳转到登录页面
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
Thread.sleep(1000);
driver.findElement(By.cssSelector("#index_user_logout")).click();
Thread.sleep(3000);
// 5.登录被发送者,即接收者账号
// 输入用户名
driver.findElement(By.cssSelector("#username")).sendKeys(username2);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 输入密码
driver.findElement(By.cssSelector("#password")).sendKeys(password2);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 点击登录按钮
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(1000);
// 6.点击小铃铛,打开到站内信页面,验证是否接受到站内信
driver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a > svg")).click();
Thread.sleep(3000);
// 验证第一条站内信内容
String act1 = driver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > div")).getText();
// 验证信息状态
String except2 = "[未读]";
String act2 = driver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a > span.index_message_item_statue")).getText();
// 验证发送者
String act3 = driver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a > span:nth-child(2) > strong")).getText();
// 截图保存测试结果
getScreenShot(getClass().getName());
assert act1.equals(except1);
assert act2.equals(except2);
assert act3.equals(username1);
System.out.println("站内信发送成功!");
// 7.点击第一条站内信后取消,检查状态更新
driver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a")).click();
Thread.sleep(3000);
// 点击取消
driver.findElement(By.cssSelector("#index_message_reply_cancel")).click();
// 验证信息状态
String except4 = "[已读]";
String act4 = driver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a > span.index_message_item_statue")).getText();
// 截图保存测试结果
getScreenShot(getClass().getName());
assert act4.equals(except4);
System.out.println("站内信状态切换正常!");
// 8.回复站内信,点击第一条站内信,进入回复页面
driver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a")).click();
Thread.sleep(3000);
// 点击回复
driver.findElement(By.cssSelector("#btn_index_message_reply")).click();
Thread.sleep(3000);
// 在文本框中输入内容
String except5="admin2回复";
driver.findElement(By.cssSelector("#index_message_reply_receive_content")).sendKeys(except5);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
// 点击发送按钮
driver.findElement(By.cssSelector("#btn_index_send_message_reply")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
Thread.sleep(3000);
// 10.再次验证站内信状态
String except6 = "[已回复]";
String act6 = driver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a > span.index_message_item_statue")).getText();
// 截图保存测试结果
getScreenShot(getClass().getName());
assert except6.equals(act6);
System.out.println("站内信状态切换正常!");
// 刷新页面
driver.navigate().refresh();
Thread.sleep(3000);
// 11.退出登录
driver.findElement(By.cssSelector("#index_nav_avatar")).click();
Thread.sleep(1000);
driver.findElement(By.cssSelector("#index_user_logout")).click();
Thread.sleep(3000);
// 12.登录账号admin,被回复者,验证是否收到了回复内容
// 输入用户名
driver.findElement(By.cssSelector("#username")).sendKeys(username1);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 输入密码
driver.findElement(By.cssSelector("#password")).sendKeys(password1);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 点击登录按钮
driver.findElement(By.cssSelector("#submit")).click();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
// 点击站内信,跳转到站内信页面
// 点击小铃铛
driver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a > svg")).click();
Thread.sleep(3000);
// 验证第一条站内信内容except5
String except7=except5;
String act7 = driver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > div")).getText();
// 验证信息状态
String except8 = "[未读]";
String act8 = driver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a > span.index_message_item_statue")).getText();
// 验证回复者 admin2
String except9=username2;
String act9 = driver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a > span:nth-child(2) > strong")).getText();
// 截图保存测试结果
getScreenShot(getClass().getName());
assert except7.equals(act7);
assert except8.equals(act8);
assert except9.equals(act9);
System.out.println("站内信回复成功!");
}