fs-lawrisk/tests/automate_template_test.py

170 lines
6.5 KiB
Python

"""
自动化测试模板管理功能
使用Playwright自动化浏览器操作
"""
from playwright.sync_api import sync_playwright
import time
import os
BASE_URL = "http://localhost:8000"
def test_template_management():
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
try:
print("=" * 60)
print("Starting Template Management Automated Test")
print("=" * 60)
# 步骤1: 访问超级管理员控制台
print("\n[1/10] Visiting admin console...")
page.goto(f"{BASE_URL}/static/super_admin.html")
page.wait_for_load_state('networkidle')
page.wait_for_timeout(2000)
# 截图查看当前页面
page.screenshot(path='/tmp/admin_console.png', full_page=True)
print(" Screenshot saved: /tmp/admin_console.png")
# 检查是否需要登录
current_url = page.url
if 'login' in current_url:
print(" Login required! Please login manually...")
print(" After login, please run this script again")
input("Press Enter after login to continue...")
page.goto(f"{BASE_URL}/static/super_admin.html")
page.wait_for_load_state('networkidle')
page.wait_for_timeout(2000)
# 步骤2: 切换到模板管理标签页
print("\n[2/10] Switching to Template Management tab...")
template_tab = page.locator('[data-tab="templates-tab"]')
template_tab.click()
page.wait_for_timeout(1000)
print(" Tab switched successfully")
# 步骤3: 查看当前模板信息
print("\n[3/10] Checking current template metadata...")
template_meta = page.locator('#templateMeta').text_content()
print(f" Current template: {template_meta}")
# 步骤4: 下载当前模板
print("\n[4/10] Downloading current template...")
with page.expect_download() as download_info:
download_btn = page.locator('#downloadTemplateBtn')
download_btn.click()
page.wait_for_timeout(2000)
download = download_info.value
original_filename = download.suggested_filename
print(f" Downloaded: {original_filename}")
# 步骤5: 准备上传测试模板
print("\n[5/10] Preparing test template upload...")
test_template = "RiskTemplate_Test.xlsx"
if not os.path.exists(test_template):
print(f" ERROR: Test template not found: {test_template}")
print(" Please run test_template_management_simple.py first")
return
print(f" Test template ready: {test_template}")
# 步骤6: 上传测试模板
print("\n[6/10] Uploading test template...")
file_input = page.locator('input[type="file"][name="file"]')
# 选择文件
file_input.set_input_files(test_template)
print(f" File selected: {test_template}")
# 提交表单
form = page.locator('#templateForm')
form_submit = form.locator('button[type="submit"]')
form_submit.click()
print(" Form submitted")
# 等待处理
page.wait_for_timeout(3000)
# 步骤7: 检查上传结果
print("\n[7/10] Checking upload result...")
success_msg = page.locator('.message.show')
msg_count = success_msg.count()
if msg_count > 0:
message_text = success_msg.text_content()
print(f" Success message: {message_text}")
else:
print(" No success message detected (checking if succeeded anyway)")
# 重新检查模板信息
updated_meta = page.locator('#templateMeta').text_content()
print(f" Updated template: {updated_meta}")
# 步骤8: 再次下载验证内容
print("\n[8/10] Downloading template again to verify...")
with page.expect_download() as download_info2:
download_btn2 = page.locator('#downloadTemplateBtn')
download_btn2.click()
page.wait_for_timeout(2000)
download2 = download_info2.value
verification_filename = download2.suggested_filename
print(f" Downloaded: {verification_filename}")
# 步骤9: 恢复原始模板
print("\n[9/10] Restoring original template...")
original_backup = "RiskTemplate_Original.xlsx"
if os.path.exists(original_backup):
file_input.set_input_files(original_backup)
print(f" File selected: {original_backup}")
form_submit.click()
print(" Form submitted")
page.wait_for_timeout(3000)
# 检查恢复结果
restore_msg = page.locator('.message.show')
if restore_msg.count() > 0:
restore_text = restore_msg.text_content()
print(f" Restore message: {restore_text}")
else:
print(f" WARNING: Original template not found: {original_backup}")
print(" Please upload the original template manually")
# 步骤10: 最终验证
print("\n[10/10] Final verification...")
final_meta = page.locator('#templateMeta').text_content()
print(f" Final template: {final_meta}")
print("\n" + "=" * 60)
print("Test completed successfully!")
print("=" * 60)
print("\nSummary:")
print(f" - Downloaded original template: {original_filename}")
print(f" - Uploaded test template: {test_template}")
print(f" - Verified update")
print(f" - Downloaded for verification: {verification_filename}")
print(f" - Restored original template")
except Exception as e:
print(f"\nERROR: {e}")
import traceback
traceback.print_exc()
# 保存错误截图
page.screenshot(path='/tmp/error_screenshot.png', full_page=True)
print("Error screenshot saved: /tmp/error_screenshot.png")
finally:
print("\nClosing browser...")
browser.close()
if __name__ == "__main__":
test_template_management()