Files
nanocode/happy-games/test_tetris_headless.py
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

136 lines
5.3 KiB
Python

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