#!/usr/bin/env python3 """ Headless浏览器测试俄罗斯方块游戏 """ import asyncio from playwright.async_api import async_playwright import time import os async def test_tetris_version(url, version_name): """测试一个俄罗斯方块版本""" print(f"\n{'='*60}") print(f"测试: {version_name}") print(f"URL: {url}") print(f"{'='*60}") async with async_playwright() as p: # 启动浏览器 browser = await p.chromium.launch(headless=True) context = await browser.new_context( viewport={'width': 1280, 'height': 720}, user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' ) page = await context.new_page() try: # 导航到页面 print(f"导航到 {url}...") await page.goto(url, wait_until='networkidle', timeout=30000) # 等待页面加载 await page.wait_for_timeout(2000) # 检查页面标题 title = await page.title() print(f"页面标题: {title}") # 检查Canvas元素 canvas_count = await page.locator('canvas').count() print(f"Canvas元素数量: {canvas_count}") if canvas_count > 0: # 获取Canvas尺寸 canvas = page.locator('canvas').first canvas_size = await canvas.evaluate('canvas => ({width: canvas.width, height: canvas.height})') print(f"Canvas尺寸: {canvas_size['width']}x{canvas_size['height']}") # 检查Canvas是否可见 is_visible = await canvas.is_visible() print(f"Canvas是否可见: {is_visible}") # 截图 screenshot_path = f'test_{version_name.replace(" ", "_").replace("/", "_")}.png' await page.screenshot(path=screenshot_path, full_page=True) print(f"截图保存到: {screenshot_path}") # 检查控制台日志 console_logs = [] def handle_console(msg): console_logs.append({ 'type': msg.type, 'text': msg.text, 'timestamp': time.time() }) print(f"控制台[{msg.type}]: {msg.text}") page.on('console', handle_console) # 查找开始游戏按钮 start_buttons = await page.locator('button:has-text("开始游戏"), button:has-text("Start"), button:has-text("▶️")').count() print(f"开始游戏按钮数量: {start_buttons}") if start_buttons > 0: # 点击开始游戏按钮 print("点击开始游戏按钮...") await page.locator('button:has-text("开始游戏"), button:has-text("Start"), button:has-text("▶️")').first.click() await page.wait_for_timeout(1000) # 等待几秒,让游戏运行 print("等待游戏运行5秒...") await page.wait_for_timeout(5000) # 检查是否有方块生成 print("检查游戏状态...") # 尝试获取调试信息 debug_divs = await page.locator('#debug, .debug, [id*="debug"], [class*="debug"]').count() print(f"调试信息元素数量: {debug_divs}") if debug_divs > 0: debug_text = await page.locator('#debug, .debug, [id*="debug"], [class*="debug"]').first.text_content() print(f"调试信息:\n{debug_text[:500]}...") # 检查分数显示 score_elements = await page.locator('#score, .score, [id*="score"], [class*="score"]').count() print(f"分数显示元素数量: {score_elements}") if score_elements > 0: score_text = await page.locator('#score, .score, [id*="score"], [class*="score"]').first.text_content() print(f"分数显示: {score_text}") print(f"\n✅ {version_name} 测试完成") except Exception as e: print(f"❌ 测试失败: {e}") finally: await browser.close() async def main(): """主测试函数""" base_url = "http://129.211.173.87:8895/games/tetris/" # 要测试的版本列表 versions = [ ("tetris_simple_fall_test.html", "简单下落测试版"), ("tetris_playcanvas_super_debug.html", "PlayCanvas超级调试版"), ("tetris_playcanvas_working.html", "PlayCanvas工作版"), ("tetris_playcanvas_fixed.html", "PlayCanvas修复版"), ("tetris_simple_fixed.html", "简单修复版"), ("tetris_working.html", "工作版"), ("tetris_mobile.html", "手机优化版"), ("index.html", "默认版") ] for filename, version_name in versions: url = base_url + filename if os.path.exists(f'/home/ubuntu/nanocode/happy-games/games/tetris/{filename}'): await test_tetris_version(url, version_name) else: print(f"\n⚠️ 文件不存在: {filename}") if __name__ == '__main__': asyncio.run(main())