4.2 KiB
4.2 KiB
完成对话框自动关闭功能 - 测试指南
快速测试步骤
1. 启动应用
cd PetWashControl
dotnet run
2. 完整流程测试
- 在待机界面点击"请取走宠物"按钮
- 选择任意套餐(如"基础清洗")
- 点击"开始洗护"
- 等待洗护流程完成(约2-3分钟)
- 观察完成对话框
3. 快速模拟测试
如果想快速测试对话框功能,可以临时修改代码:
临时修改 MainViewModel.cs:
在 StartWashingCommand 方法中,找到调用 SimulateWashingProcessAsync() 的地方,
直接调用 CompleteWashingAsync() 来快速触发完成对话框。
// 临时测试代码
await CompleteWashingAsync();
return;
4. 验证清单
对话框显示
- 对话框居中显示在屏幕中央
- 显示绿色对勾图标
- 显示"清洗完成!"文本
- 显示"感谢使用无人自动洗宠机"文本
- 显示倒计时文本"30秒后自动返回首页"
- 显示蓝色"确定"按钮
倒计时功能
- 倒计时从30秒开始
- 每秒递减1秒
- 文本实时更新(29秒、28秒...)
- 倒计时到0秒时自动关闭对话框
手动关闭功能
- 点击"确定"按钮立即关闭对话框
- 倒计时停止
- 不等待30秒
关闭后行为
- 对话框关闭后自动返回待机界面
- 显示轮播图
- 显示"请取走宠物"按钮
- 温度显示正常
- 液位显示正常
UI样式
- 圆角边框显示正常
- 阴影效果显示正常
- 按钮悬停效果正常(颜色变深)
- 整体布局美观
5. 测试场景
场景1:自动关闭
- 完成洗护流程
- 不点击任何按钮
- 等待30秒
- 验证对话框自动关闭并返回首页
场景2:手动关闭
- 完成洗护流程
- 在倒计时期间点击"确定"按钮
- 验证对话框立即关闭并返回首页
场景3:多次测试
- 重复执行洗护流程3次
- 每次使用不同的关闭方式(自动/手动)
- 验证每次都能正常工作
6. 性能验证
- 对话框打开速度快(<100ms)
- 倒计时更新流畅,无卡顿
- 关闭后无内存泄漏
- 定时器正确停止
7. 异常情况测试
测试1:快速点击
- 在对话框显示后立即快速点击"确定"按钮多次
- 验证不会出现异常
测试2:窗口拖动
- 尝试拖动对话框(应该无法拖动,因为设置了居中且无标题栏)
- 验证对话框保持居中
测试3:Alt+F4关闭
- 按下 Alt+F4 尝试关闭对话框
- 验证对话框正常关闭并返回首页
8. 日志验证
检查日志文件,确认以下信息:
清洗完成,订单ID: xxx
订单流程完成
9. 数据库验证
检查订单状态是否正确更新为"已完成":
# 如果使用SQLite
sqlite3 PetWash.Api/petwash.db "SELECT * FROM Orders ORDER BY CreatedAt DESC LIMIT 1;"
验证最新订单的 Status 字段为 "Completed"。
10. MQTT消息验证
如果启用了MQTT,验证是否发送了完成消息:
{
"status": "completed",
"orderId": "xxx",
"timestamp": "2026-02-27T..."
}
预期结果
✅ 所有测试项通过 ✅ 对话框显示美观 ✅ 倒计时功能正常 ✅ 自动关闭功能正常 ✅ 手动关闭功能正常 ✅ 返回首页功能正常 ✅ 无异常或错误
问题排查
问题1:对话框不显示
- 检查 MainViewModel.cs 中是否正确调用了
new Views.CompletionDialog() - 检查 XAML 文件是否正确编译
问题2:倒计时不更新
- 检查 DispatcherTimer 是否正确启动
- 检查 Tick 事件是否正确绑定
问题3:不能自动关闭
- 检查倒计时逻辑中的 Close() 方法是否被调用
- 检查是否有异常阻止了关闭
问题4:关闭后不返回首页
- 检查 CompleteWashingAsync 方法中的 BackToIdle() 调用
- 检查 CurrentOrder 和 SelectedPackage 是否正确清空
成功标准
- 对话框在洗护完成后正确显示
- 倒计时从30秒准确递减到0秒
- 30秒后自动关闭并返回首页
- 点击"确定"按钮立即关闭并返回首页
- UI美观,用户体验良好
- 无内存泄漏或性能问题
测试完成时间
预计测试时间:10-15分钟