#!/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()