当前位置: 首页 > article >正文

基于java的叙事之眼系统自动化测试

1.公共类Utils这是一个叙事之眼写小说自动化测试的公共工具类进行Selenium 自动化测试所有测试用例都可以共用它统一创建、管理 Chrome 浏览器驱动打开测试页面设置等待时间提供自动化截图功能。作用统一管理浏览器驱动避免重复创建、资源浪费实现单例浏览器所有测试用例共用一个 driver统一打开测试页面统一设置等待时间提供公共截图工具自动按时间命名、自动保存大幅减少测试代码冗余让测试用例更简洁、易维护public class Utils { public static WebDriver driver null; public WebDriverWait wait null; //内容页URL public static String detailUrl http://8.137.19.140:8080/novel_detail.html?blogId115789; public Utils(String url) { driver createDriver(); //调用driver driver.get(url); //显示等待 wait new WebDriverWait(driver,Duration.ofSeconds(3)); } //创建驱动对象 public static WebDriver createDriver() { if(driver null) { //下载驱动 WebDriverManager.chromedriver().setup(); ChromeOptions options new ChromeOptions(); //添加配置允许访问所有的连接 options.addArguments(--remote-allow-origins*); //创建驱动对象 driver new ChromeDriver(options); //添加隐式等待 driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3)); } return driver; } public void ScreenShot(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()); //文件名./src/test/java/images/2025-07-12/test01-15083020.png String filename ./src/test/java/images/ dirTime / str - fileTime .png; File srcFile ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(srcFile,new File(filename)); } }2.小说登录页(loginPage)该类基于 Selenium 实现对登录页面的全流程自动化验证直接继承公共工具类Utils复用浏览器驱动、页面加载、隐式等待、显示等待、自动截图等基础能力无需重复编写底层代码。作用该类是小说系统登录页面的自动化测试类继承工具类实现浏览器操作、页面访问、自动截图等基础功能。代码实现了页面加载校验、正常登录成功、异常登录失败三大核心测试场景全面验证登录功能。所有测试步骤自动截图留存确保登录功能可用、安全、稳定为小说系统提供可靠的功能保障。package tests; import common.Utils; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.support.ui.ExpectedConditions; import java.io.IOException; public class loginPage extends Utils { public static String url http://8.137.19.140:8080/novel_login.html; public loginPage() { super(url); } /** * 检查登录页面 */ public void checkPageRight() throws IOException { //检查登录框 driver.findElement(By.cssSelector(#username)); driver.findElement(By.cssSelector(#password)); driver.findElement(By.cssSelector(#submit)); //截图 ScreenShot(Thread.currentThread().getStackTrace()[1].getMethodName()); } /** * 登录成功——正确的账号和密码 */ public void LoginSuc() throws IOException { //先清空输入框 driver.findElement(By.cssSelector(#username)).clear(); driver.findElement(By.cssSelector(#password)).clear(); driver.findElement(By.cssSelector(#username)).sendKeys(admin); driver.findElement(By.cssSelector(#password)).sendKeys(123456); driver.findElement(By.cssSelector(#submit)).click(); //截图 ScreenShot(Thread.currentThread().getStackTrace()[1].getMethodName()); //验证登录成功---退出登录按钮 driver.findElement(By.cssSelector(body div.nav a:nth-child(6))); } /** * 异常登录 * ————用户名和密码都为空 * ————用户名和密码都错误 * ————用户名不为空密码为空 * ————用户名为空密码不为空 * ————错误的用户正确的密码 * ————正确的用户名错误的密码 */ //正确的用户名错误的密码 public void LoginFail() throws IOException { driver.findElement(By.cssSelector(#username)).sendKeys(admin); driver.findElement(By.cssSelector(#password)).sendKeys(0000); //截图 ScreenShot(Thread.currentThread().getStackTrace()[1].getMethodName()); driver.findElement(By.cssSelector(#submit)).click(); //等待弹窗 wait.until(ExpectedConditions.alertIsPresent()); //处理错误弹窗 Alert alert driver.switchTo().alert(); alert.accept(); } }3.小说列表页(listPage)该类模拟用户访问小说列表页的真实操作自动检查页面核心模块是否正常加载、小说信息是否完整显示、「查看全文」按钮是否能正常跳转到小说详情页确保小说列表页的展示功能、跳转功能正常可用保障用户能正常浏览小说列表并进入内容页阅读。作用先获取列表页的小说标题作为校验依据自动点击「查看全文」按钮模拟用户跳转操作获取跳转后详情页的小说标题对比两个标题是否一致验证跳转功能正常、跳转到正确的小说详情页记录内容页 URL供后续测试复用实现测试数据传递。package tests; import common.Utils; import org.openqa.selenium.By; public class listPage extends Utils { public static String url http://8.137.19.140:8080/novel_list.html; public listPage() { super(url); } /** * 检查小说列表——三个模块个人信息模块、小说列表模块、菜单模块 * 小说列表模块 */ public void checknovelList() { //小说题目 String title driver.findElement(By.cssSelector(body div.container div.right div:nth-child(2) div.title)).getText(); //小说发布时间 String pushTime driver.findElement(By.cssSelector(body div.container div.right div:nth-child(2) div.date)).getText(); //小说内容 String content driver.findElement(By.cssSelector(body div.container div.right div:nth-child(2) div.desc)).getText(); //查看小说全文 String button driver.findElement(By.cssSelector(body div.container div.right div:nth-child(2) a)).getText(); //校验文本 assert !title.isEmpty(); assert !pushTime.isEmpty(); assert !content.isEmpty(); assert button.equals(查看全文); } /** * 检查查看全文按钮的跳转 */ public void checkBtnJump() { //获取列表页小说题目 String title driver.findElement(By.cssSelector(body div.container div.right div:nth-child(2) div.title)).getText(); //点击查看全文按钮实现跳转 driver.findElement(By.cssSelector(body div.container div.right div:nth-child(1) a)).click(); //获取小说内容题目 String jumpTitle driver.findElement(By.cssSelector(body div.container div.right div div.title)).getText(); //验证 assert jumpTitle.equals(title); detailUrl driver.getCurrentUrl(); } }4.小说内容页(detailPage)该类自动验证小说内容页能否正常打开、小说信息是否完整展示、编辑 / 删除功能按钮是否显示正确确保用户和管理员可以正常查看、操作小说详情保障小说系统内容展示与管理功能稳定可用。作用获取页面核心信息自动定位并读取小说标题、发布时间、正文内容确认信息可以正常获取获取功能按钮定位并读取编辑按钮、删除按钮的显示文字确认按钮显示正常断言验证标题、发布时间、小说正文不为空 → 页面内容正常展示、没有空白编辑按钮显示 “编辑”、删除按钮显示 “删除” → 功能按钮正常显示整体验证只要所有断言通过就代表小说内容页加载完整、展示正常、管理功能可用。package tests; import common.Utils; import org.openqa.selenium.By; public class detailPage extends Utils { public static String url detailUrl; public detailPage() { super(url); } /** * 验证内容页是否加载 */ public void CheckPageRight() { //题目 String title driver.findElement(By.cssSelector(body div.container div.right div div.title)).getText(); //发布时间 String pushTime driver.findElement(By.cssSelector(body div.container div.right div div.date)).getText(); String content driver.findElement(By.cssSelector(#detail)).getText(); /* //内容 String content driver.findElement(By.cssSelector(#detail p)).getText();*/ //编辑按钮 String edit driver.findElement(By.cssSelector(body div.container div.right div div.operating button:nth-child(1))).getText(); //删除按钮 String del driver.findElement(By.cssSelector(body div.container div.right div div.operating button:nth-child(2))).getText(); //校验 assert !title.isEmpty(); assert !pushTime.isEmpty(); assert !content.isEmpty(); assert edit.equals(编辑); assert del.equals(删除); } }5.发布小说页(sendPage)该类模拟管理员发布小说的完整操作自动生成标题、填写内容、点击发布最后校验小说是否成功出现在列表页确保小说发布功能可用、数据能正常保存并展示。生成唯一标题使用时间戳生成不重复的小说名避免重复发布导致测试失败。自动填写发布表单自动在标题框输入标题双击富文本编辑器输入小说内容适配编辑器需要双击激活的特性执行发布操作自动点击「发布」按钮提交小说数据。验证发布结果最关键发布后自动跳转到小说列表页获取列表中最新一条小说的标题与发布时的标题做对比断言一致 发布成功全流程闭环测试从填写 → 发布 → 校验展示完整验证小说发布功能。package tests; import common.Utils; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; import java.text.SimpleDateFormat; import java.util.List; public class sendPage extends Utils { public static String url http://8.137.19.140:8080/novel_send.html; public sendPage() { super(url); } /** * 正常发布小说 */ public void sendSuc() throws InterruptedException { //创建的小说标题随机生成 SimpleDateFormat sim new SimpleDateFormat(HHmmssSS); String titleTime sim.format(System.currentTimeMillis()); String title 自动创建小说-titleTime; //找到标题输入框并输入内容 driver.findElement(By.cssSelector(#title)).sendKeys(title); // //找到内容区域并输入内容 // driver.findElement(By.cssSelector(#editor div.CodeMirror.cm-s-default.CodeMirror-wrap div.CodeMirror-scroll div.CodeMirror-sizer div div div div.CodeMirror-code div pre)).sendKeys(我的小说); Actions action new Actions(driver); action.doubleClick(ele).sendKeys(小说内容).perform(); Thread.sleep(500); // action.click(ele).sendKeys(喜欢看小说).perform(); //点击发布 driver.findElement(By.cssSelector(#submit)).click(); //验证是否发布成功 //发布成功之后跳转到列表页找是否存在刚创建的小说————小说标题 ListWebElement novel driver.findElements(By.cssSelector(body div.container div.right div)); String titleAfter driver.findElement(By.cssSelector(body div.container div.right div:nth-child(blogs.size()) div.title)).getText(); assert titleAfter.equals(title); } }6.runTest该类它不负责具体的页面元素操作只负责按顺序启动并执行所有页面的测试用例一键完成从登录→列表→详情→发布的全流程自动化测试。package tests; import java.io.IOException; public class runTests { public static void main(String[] args) throws IOException, InterruptedException { //登录用例 LoginPage login new loginPage(); login.checkPageRight(); login.LoginFail(); login.LoginSuc(); //列表页用例 ListPage list new listPage(); list.checknovelList(); list.checkBtnJump(); //内容页用例 DetailPage detail new detailPage(); detail.CheckPageRight(); //发布页用例 SendPage send new sendPage(); send.sendSuc(); } }7. 总结小说系统自动化测试围绕核心模块开展完成脚本开发、用例执行、缺陷跟踪等工作达成预设测试目标测试用例全部通过。

相关文章:

基于java的叙事之眼系统自动化测试

1.公共类(Utils)这是一个叙事之眼写小说自动化测试的公共工具类,进行Selenium 自动化测试,所有测试用例都可以共用它,统一创建、管理 Chrome 浏览器驱动,打开测试页面,设置等待时间,…...

Ostrakon-VL-8B嵌入式部署初探:轻量级餐饮设备端视觉应用构想

Ostrakon-VL-8B嵌入式部署初探:轻量级餐饮设备端视觉应用构想 最近在琢磨一个挺有意思的事儿:那些餐厅里的智能点餐屏、后厨的智能识别设备,能不能变得更“聪明”一点?比如,顾客把一盘菜放到摄像头前,设备…...

启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(十一)

一、引言:从“求解问题”到“设计搜索策略”在复杂优化问题中,我们往往面对一个根本性困境:问题可以形式化,但最优解难以在可接受时间内获得例如:上百节点的路径规划(旅行商问题)大规模组合选择…...

Alpamayo-R1-10B保姆级教学:WebUI中Trajectory Visualization坐标系解读

Alpamayo-R1-10B保姆级教学:WebUI中Trajectory Visualization坐标系解读 1. 引言:从鸟瞰图到方向盘,看懂自动驾驶的“导航地图” 当你第一次打开Alpamayo-R1-10B的WebUI,点击“开始推理”后,最吸引眼球的可能就是右侧…...

HunyuanVideo-Foley镜像免配置:彻底告别torch版本冲突与依赖地狱

HunyuanVideo-Foley镜像免配置:彻底告别torch版本冲突与依赖地狱 1. 镜像概述与核心优势 HunyuanVideo-Foley私有部署镜像是一款专为视频生成与音效生成任务深度优化的解决方案。基于RTX 4090D 24GB显存和CUDA 12.4环境构建,它彻底解决了AI开发者最头疼…...

构建企业级AI助手:Phi-4-mini-reasoning与SpringBoot微服务集成

构建企业级AI助手:Phi-4-mini-reasoning与SpringBoot微服务集成 1. 企业AI助手的价值与挑战 在数字化转型浪潮中,智能助手正成为企业提升效率的关键工具。传统客服系统每天需要处理大量重复性咨询,人工成本居高不下;内部知识库检…...

Wan2.2-I2V-A14B十分钟部署:Windows系统下Docker快速启动指南

Wan2.2-I2V-A14B十分钟部署:Windows系统下Docker快速启动指南 1. 准备工作:环境检查与安装 在开始之前,我们需要确保你的Windows系统满足基本要求。这个教程适用于Windows 10和11的64位系统,建议使用专业版或企业版以获得最佳体…...

Z-Image-Turbo-rinaiqiao-huiyewunv 与QT框架集成:开发跨平台桌面AI图像工具

Z-Image-Turbo-rinaiqiao-huiyewunv 与QT框架集成:开发跨平台桌面AI图像工具 你是不是也遇到过这样的情况?在网上看到一个很酷的AI图像生成模型,兴致勃勃地下载下来,结果发现只能在命令行里敲代码调用,参数调整全靠猜…...

[特殊字符] MoviePy 报错:配置了 ImageMagick 环境变量却不好使?

.This error can be due to the fact that ImageMagick is not installed on your computer, or (for Windows users) that you didnt specify the path to the ImageMagick binary in file conf.py, or that the path you specified is incorrect在使用 Python 的 MoviePy 库制…...

一键体验GPT-SoVITS:Docker部署+语音合成实战教程

一键体验GPT-SoVITS:Docker部署语音合成实战教程 1. 为什么选择GPT-SoVITS进行语音合成 语音合成技术近年来取得了长足进步,但大多数开源项目要么需要大量训练数据,要么音质不够理想。GPT-SoVITS的出现改变了这一局面,它结合了G…...

基于springboot的摄影约拍跟拍预定管理系统

目录同行可拿货,招校园代理 ,本人源头供货商核心功能模块辅助功能模块技术实现要点项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 核心功能模块 用户管理模块 注册与登录&#xff1a…...

基于springboot的性格测试系统

目录同行可拿货,招校园代理 ,本人源头供货商核心功能模块技术实现要点用户体验优化项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 核心功能模块 用户管理模块 用户注册、登录、个人信…...

璀璨星河Starry Night Art Gallery部署教程:Streamlit镜像一键开箱即用

璀璨星河Starry Night Art Gallery部署教程:Streamlit镜像一键开箱即用 1. 开篇:走进AI艺术创作新世界 你是否曾经想过,只需要输入一段文字描述,就能生成一幅充满艺术感的画作?璀璨星河Starry Night Art Gallery正是…...

Hunyuan-MT-7B性能优化:如何提升翻译速度与效果?

Hunyuan-MT-7B性能优化:如何提升翻译速度与效果? 1. 引言 在全球化交流日益频繁的今天,高效准确的多语言翻译已成为企业国际化运营的关键能力。Hunyuan-MT-7B作为一款支持33种语言互译的大模型,凭借其在WMT25比赛中30种语言第一…...

AIGC内容审核利器:Nomic-Embed-Text-V2-MoE在UGC平台的落地效果

AIGC内容审核利器:Nomic-Embed-Text-V2-MoE在UGC平台的落地效果 最近两年,AIGC技术真是火得一塌糊涂。从写文章、画图到做视频,用户生成内容(UGC)的量和质都迎来了大爆发。但随之而来的,是平台运营者们越来…...

Phi-3-mini-4k-instruct-gguf入门必看:最大输出长度从256→512对结果完整性影响实测

Phi-3-mini-4k-instruct-gguf入门必看:最大输出长度从256→512对结果完整性影响实测 1. 模型简介与测试背景 Phi-3-mini-4k-instruct-gguf是微软推出的轻量级文本生成模型,特别适合问答、文本改写、摘要整理等场景。作为Phi-3系列的GGUF版本&#xff0…...

ComfyUI Qwen-Image-Edit-F2P 实战:5步搞定AI人像全身照生成

ComfyUI Qwen-Image-Edit-F2P 实战:5步搞定AI人像全身照生成 想用一张简单的人脸照片生成专业级的全身形象照吗?ComfyUI Qwen-Image-Edit-F2P模型让这个过程变得异常简单。无论你是电商卖家需要产品模特图,还是个人用户想为社交媒体创建独特…...

“黑箱”终结者来了:SITS2026首创的Drug-Reasoning Graph如何让AGI决策路径满足EMA AI监管沙盒审计要求?

第一章:SITS2026案例:AGI在药物研发中的应用 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026大会上,DeepPharma Labs联合MIT Computational Therapeutics Group展示了首个面向端到端药物发现的通用人工智能系统——MolSynth-AGI。…...

2026奇点大会记忆系统分论坛未公开PPT泄露:12家头部AI公司提交的7种异构记忆接口协议,谁将定义下一代AIOS内存语义?

第一章:2026奇点智能技术大会:AGI与记忆系统 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次将“记忆系统”确立为AGI架构的核心支柱,而非传统意义上的辅助模块。研究者提出,通用智能体必须具备可演化的长期记忆&am…...

樱桃脱裤液从哪买

樱桃脱裤液从哪买#樱桃脱裤液#樱桃脱裤液从哪买#中天花果堡#中天作物#中天农科...

【AGI语言能力临界点预警】:3项NIST新标即将强制落地,你的系统6个月内能否通过语义一致性认证?

第一章:AGI语言能力临界点的本质定义与范式跃迁 2026奇点智能技术大会(https://ml-summit.org) AGI语言能力临界点并非性能指标的简单阈值,而是系统在语义理解、跨模态推理与自主目标建模三者耦合下涌现出的质变边界——当模型能在无监督提示迁移中稳定…...

AGI迁移学习能力评估体系(全球首套工业级5维量化框架):覆盖语言、视觉、决策、机器人、科学发现全场景

第一章:AGI的跨领域迁移学习能力 2026奇点智能技术大会(https://ml-summit.org) 跨领域迁移学习是通用人工智能(AGI)区别于狭义AI的核心能力之一——它要求模型在未经历显式训练的前提下,将从视觉识别中学到的抽象因果推理机制&a…...

Oracle 26ai PDB ADG部署安装

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,15年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝15万+ 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障应急处理 文章目录 1.DGPDB 2.准备工作 2…...

C# AvaloniaUI 系列教程:第二课 - 掌控布局的艺术

在 UI 开发中,布局就像是给房子打地基。Avalonia 并不像 WinForms 那样通过“绝对坐标”来放置控件(比如设置 Left10, Top20),而是使用容器控件。这样你的程序在 Windows、Linux 或手机上运行时,界面才能自动伸缩、不乱…...

OFA英文视觉蕴含模型实战指南:与Llama-3英文LLM协同构建多步逻辑推理链

OFA英文视觉蕴含模型实战指南:与Llama-3英文LLM协同构建多步逻辑推理链 1. 镜像简介 今天给大家介绍一个特别实用的AI工具——OFA图像语义蕴含模型。这个镜像已经帮你把所有复杂的环境配置都搞定了,就像买了个新手机,开机就能直接用&#x…...

Graphormer在量子化学中的应用:HOMO/LUMO能级与激发态能量精准预测

Graphormer在量子化学中的应用:HOMO/LUMO能级与激发态能量精准预测 1. 模型概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子基准…...

Qwen3-14B企业级API网关设计:实现高可用、可扩展的AI服务

Qwen3-14B企业级API网关设计:实现高可用、可扩展的AI服务 1. 企业级AI服务的挑战与机遇 在数字化转型浪潮中,大型语言模型如Qwen3-14B正成为企业智能化转型的核心引擎。然而,直接将模型暴露给业务系统会面临诸多挑战:突发流量可…...

模块解耦的重要性

**模块解耦为什么如此重要? 1. 开发效率提升:清晰的模块边界让团队并行开发互不干扰; 2. 维护成本降低:bug修复和功能迭代的影响范围可控; 3. 代码复用性强:通用模块可在多个项目间复用; 4. 测试…...

深入理解RAG:如何让大语言模型获取实时知识

深入理解RAG:如何让大语言模型获取实时知识 RAG的核心概念与价值 RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索系统与语言模型相结合的技术架构。其核心理念是让大语言模型在生成回答时,能够动态…...

RimWorld高级性能优化:Performance Fish深度解析与实战配置教程

RimWorld高级性能优化:Performance Fish深度解析与实战配置教程 【免费下载链接】Performance-Fish Performance Mod for RimWorld 项目地址: https://gitcode.com/gh_mirrors/pe/Performance-Fish Performance Fish是RimWorld社区中备受推崇的性能优化模组&…...