136 lines
5.3 KiB
Python
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()) |