Files
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

225 lines
8.8 KiB
Python

#!/usr/bin/env python3
"""
最终完整测试
"""
from playwright.sync_api import sync_playwright
import time
def final_complete_test():
"""最终完整测试"""
print("🎮 俄罗斯方块最终完整测试")
print("=" * 70)
print("🪟 测试Windows浏览器兼容性")
print("🎯 目标: 确认所有问题都已修复")
print("=" * 70)
url = "http://129.211.173.87:8895/games/tetris/index.html"
print(f"🌐 测试URL: {url}")
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
context = browser.new_context(
viewport={"width": 1280, "height": 720},
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
)
page = context.new_page()
try:
# 1. 页面加载
print("\n1️⃣ 页面加载测试")
page.goto(url, wait_until="networkidle", timeout=10000)
print(" ✅ 页面加载成功")
time.sleep(2)
# 2. 收集日志
logs = []
page.on("console", lambda msg: logs.append({
"type": msg.type,
"text": msg.text
}))
# 3. 游戏启动
print("\n2️⃣ 游戏启动测试")
start_btn = page.query_selector("#start-btn")
if start_btn:
start_btn.click(timeout=3000)
print(" ✅ 开始按钮点击成功")
else:
print(" ❌ 未找到开始按钮")
return
# 4. 等待游戏初始化
time.sleep(3)
# 5. 测试键盘控制
print("\n3️⃣ 键盘控制测试")
print(" ⌨️ 测试左移...")
page.keyboard.press("ArrowLeft")
time.sleep(0.5)
print(" ⌨️ 测试右移...")
page.keyboard.press("ArrowRight")
time.sleep(0.5)
print(" ⌨️ 测试旋转...")
page.keyboard.press(" ")
time.sleep(0.5)
print(" ⌨️ 测试加速下落...")
page.keyboard.press("ArrowDown")
time.sleep(0.5)
# 6. 等待游戏运行
print("\n4️⃣ 游戏运行测试")
print(" ⏳ 等待游戏运行20秒...")
time.sleep(20)
# 7. 分析日志
print("\n5️⃣ 日志分析")
# 分类日志
init_logs = [log for log in logs if "初始化" in log["text"] or "Canvas" in log["text"]]
spawn_logs = [log for log in logs if "生成新方块" in log["text"]]
move_logs = [log for log in logs if "移动方块" in log["text"] or "游戏循环" in log["text"]]
error_logs = [log for log in logs if log["type"] == "error"]
nan_logs = [log for log in logs if "NaN" in log["text"] or "undefined" in log["text"]]
print(f" 总日志数: {len(logs)}")
print(f" 初始化日志: {len(init_logs)}")
print(f" 方块生成日志: {len(spawn_logs)}")
print(f" 方块移动日志: {len(move_logs)}")
print(f" 错误日志: {len(error_logs)}")
print(f" NaN/undefined日志: {len(nan_logs)}")
# 8. 显示关键日志
print("\n6️⃣ 关键日志")
if spawn_logs:
print(" 🧱 方块生成记录:")
for i, log in enumerate(spawn_logs[-3:]):
print(f" {i+1}. {log['text']}")
if move_logs:
print(" 🚀 方块移动记录:")
valid_moves = [log for log in move_logs if "移动方块到:" in log["text"] and "NaN" not in log["text"]]
for i, log in enumerate(valid_moves[-5:]):
print(f" {i+1}. {log['text']}")
if error_logs:
print(" ❌ 错误记录:")
for i, log in enumerate(error_logs):
print(f" {i+1}. {log['text']}")
if nan_logs:
print(" ⚠️ NaN/undefined问题:")
for i, log in enumerate(nan_logs):
print(f" {i+1}. {log['text']}")
# 9. 问题修复验证
print("\n7️⃣ 问题修复验证")
# 检查原始问题是否修复
original_problems_fixed = True
problems = []
# 检查NaN问题
if len(nan_logs) > 0:
original_problems_fixed = False
problems.append("NaN/undefined问题未修复")
else:
print(" ✅ NaN/undefined问题已修复")
# 检查方块生成
if len(spawn_logs) == 0:
original_problems_fixed = False
problems.append("方块未生成")
else:
# 检查位置是否正确
correct_positions = 0
for log in spawn_logs:
if "位置: (" in log["text"] and "undefined" not in log["text"]:
correct_positions += 1
if correct_positions == len(spawn_logs):
print(f" ✅ 方块生成正常 ({len(spawn_logs)}次,位置全部正确)")
else:
original_problems_fixed = False
problems.append(f"方块位置错误 ({correct_positions}/{len(spawn_logs)}正确)")
# 检查方块移动
if len(move_logs) == 0:
original_problems_fixed = False
problems.append("方块未移动")
else:
valid_moves_count = len([log for log in move_logs if "NaN" not in log["text"]])
if valid_moves_count > 0:
print(f" ✅ 方块移动正常 ({valid_moves_count}次有效移动)")
else:
original_problems_fixed = False
problems.append("方块移动无效")
# 检查游戏循环
game_loop_logs = [log for log in logs if "游戏循环" in log["text"]]
if len(game_loop_logs) > 0:
print(f" ✅ 游戏循环工作正常 ({len(game_loop_logs)}次)")
else:
original_problems_fixed = False
problems.append("游戏循环未工作")
# 10. 总体评估
print("\n8️⃣ 总体评估")
if original_problems_fixed:
print(" 🎉 🎉 🎉 所有问题已修复! 🎉 🎉 🎉")
print(" ✅ NaN/undefined问题: 已修复")
print(" ✅ 方块生成: 正常")
print(" ✅ 方块移动: 正常")
print(" ✅ 游戏循环: 正常")
print(" ✅ 键盘控制: 正常")
print("\n 🚀 游戏现在可以在Windows浏览器上完美运行!")
else:
print(" ⚠️ 仍有问题需要修复:")
for problem in problems:
print(f" ❌ {problem}")
# 11. 截图
screenshot_path = "/tmp/final_complete_test.png"
page.screenshot(path=screenshot_path, full_page=True)
print(f"\n📸 截图保存: {screenshot_path}")
# 12. 给用户的建议
print("\n9️⃣ 给用户的建议")
print("=" * 70)
if original_problems_fixed:
print("🎮 请用户测试以下功能:")
print("1. 访问: http://129.211.173.87:8895/games/tetris/")
print("2. 点击'开始游戏'按钮")
print("3. 使用键盘控制:")
print(" - ← → : 左右移动")
print(" - ↓ : 加速下落")
print(" - 空格键 : 旋转方块")
print(" - P键 : 暂停/继续")
print("4. 观察方块是否自动下落")
print("5. 检查是否有任何错误")
print("\n✅ 预期结果: 游戏应该完全正常工作,无NaN错误")
else:
print("🔧 需要进一步调试:")
for problem in problems:
print(f" - {problem}")
print("=" * 70)
finally:
page.close()
context.close()
browser.close()
print("\n✅ 最终完整测试完成!")
if __name__ == "__main__":
final_complete_test()