""" 一物一码会员营销系统 - 手动测试辅助脚本 此脚本帮助你手动测试系统,会自动截图并记录测试步骤 """ from playwright.sync_api import sync_playwright import time from datetime import datetime def manual_test(): """手动测试辅助""" admin_url = "http://localhost:3000" h5_url = "http://localhost:5173" print("="*60) print("一物一码会员营销系统 - 手动测试辅助") print("="*60) print("\n测试说明:") print("1. 此脚本会打开浏览器供你手动操作") print("2. 按照提示完成各项测试") print("3. 脚本会自动截图记录测试过程") print("4. 按 Enter 继续下一步,输入 'q' 退出\n") with sync_playwright() as p: # 启动浏览器(非headless模式,便于观察) browser = p.chromium.launch(headless=False, slow_mo=500) context = browser.new_context() # ===== 测试管理后台 ===== print("\n【开始测试:管理后台】") admin_page = context.new_page() admin_page.goto(admin_url) admin_page.wait_for_load_state('networkidle') # 1. 登录 print("\n1. 管理后台登录") print(" 请在浏览器中:") print(" - 输入用户名: admin") print(" - 输入密码: admin123") print(" - 点击登录") input(" 完成后按 Enter 继续...") admin_page.screenshot(path=f'test_screenshots/01_admin_login_{int(time.time())}.png', full_page=True) # 2. 仪表盘 print("\n2. 查看仪表盘") print(" 请观察:") print(" - 统计卡片数据是否正常") print(" - 近期订单列表") print(" - 库存预警信息") input(" 完成后按 Enter 继续...") admin_page.screenshot(path=f'test_screenshots/02_admin_dashboard_{int(time.time())}.png', full_page=True) # 3. 营销码生成 print("\n3. 生成营销码") admin_page.goto(f"{admin_url}/marketing-codes") admin_page.wait_for_load_state('networkidle') print(" 请在浏览器中:") print(" - 批次号: BATCH-TEST-001") print(" - 产品ID: PROD-001") print(" - 产品名称: 测试产品A") print(" - 数量: 10") print(" - 点击生成") input(" 完成后按 Enter 继续...") admin_page.screenshot(path=f'test_screenshots/03_marketing_codes_{int(time.time())}.png', full_page=True) # 记录营销码 print("\n ⚠️ 请记录生成的营销码(复制第一个),稍后C端测试会用到") marketing_code = input(" 请输入第一个营销码: ").strip() # 4. 积分规则 print("\n4. 创建积分规则") admin_page.goto(f"{admin_url}/points-rules") admin_page.wait_for_load_state('networkidle') print(" 请在浏览器中:") print(" - 规则名称: 测试产品积分规则") print(" - 规则类型: 产品规则") print(" - 积分值: 100") print(" - 产品ID: PROD-001") print(" - 点击创建") input(" 完成后按 Enter 继续...") admin_page.screenshot(path=f'test_screenshots/04_points_rule_{int(time.time())}.png', full_page=True) # 5. 创建礼品 print("\n5. 创建礼品") admin_page.goto(f"{admin_url}/gifts") admin_page.wait_for_load_state('networkidle') print(" 请在浏览器中:") print(" - 点击'创建礼品'按钮") print(" - 填写礼品信息:") print(" * 名称: 测试礼品-电子产品") print(" * 类型: 实物") print(" * 描述: 这是一个测试用的电子产品礼品") print(" * 图片URL: https://via.placeholder.com/400") print(" * 所需积分: 500") print(" * 总库存: 100") print(" * 每人限兑: 2") print(" - 点击保存") input(" 完成后按 Enter 继续...") admin_page.screenshot(path=f'test_screenshots/05_gift_created_{int(time.time())}.png', full_page=True) # 6. 礼品上架 print("\n6. 礼品上架") admin_page.goto(f"{admin_url}/gifts") admin_page.wait_for_load_state('networkidle') print(" 请在浏览器中:") print(" - 找到刚创建的礼品") print(" - 点击上架开关") input(" 完成后按 Enter 继续...") admin_page.screenshot(path=f'test_screenshots/06_gift_onshelf_{int(time.time())}.png', full_page=True) # ===== 测试C端应用 ===== print("\n\n【开始测试:C端应用】") h5_page = context.new_page() h5_page.set_viewport_size({"width": 375, "height": 667}) # 移动端尺寸 h5_page.goto(h5_url) h5_page.wait_for_load_state('networkidle') # 7. 注册 print("\n7. 会员注册") timestamp = int(time.time()) % 100000000 test_phone = f"138{timestamp}" print(f" 请在浏览器中:") print(f" - 如果在登录页,点击'注册'链接") print(f" - 手机号: {test_phone}") print(f" - 密码: 123456") print(f" - 昵称: 测试用户{timestamp}") print(f" - 点击注册") input(" 完成后按 Enter 继续...") h5_page.screenshot(path=f'test_screenshots/07_h5_register_{int(time.time())}.png', full_page=True) # 8. 首页 print("\n8. 查看首页") print(" 请观察:") print(" - 会员信息是否正确") print(" - 积分余额") print(" - 快捷功能入口") input(" 完成后按 Enter 继续...") h5_page.screenshot(path=f'test_screenshots/08_h5_home_{int(time.time())}.png', full_page=True) # 9. 扫码积分 print("\n9. 扫码获取积分") print(f" 请在浏览器中:") print(f" - 点击'扫码'或导航到扫码页面") print(f" - 输入营销码: {marketing_code}") print(f" - 点击确认/提交") print(f" - 观察积分是否增加") input(" 完成后按 Enter 继续...") h5_page.screenshot(path=f'test_screenshots/09_h5_scan_{int(time.time())}.png', full_page=True) # 10. 积分明细 print("\n10. 查看积分明细") print(" 请在浏览器中:") print(" - 导航到'积分明细'页面") print(" - 观察是否有扫码积分记录") input(" 完成后按 Enter 继续...") h5_page.screenshot(path=f'test_screenshots/10_h5_points_{int(time.time())}.png', full_page=True) # 11. 积分商城 print("\n11. 浏览积分商城") print(" 请在浏览器中:") print(" - 导航到'积分商城'页面") print(" - 观察礼品列表") print(" - 点击查看礼品详情") input(" 完成后按 Enter 继续...") h5_page.screenshot(path=f'test_screenshots/11_h5_mall_{int(time.time())}.png', full_page=True) # 12. 兑换礼品(如果积分足够) response = input("\n12. 是否要测试兑换礼品? (积分需要>=500) [y/N]: ") if response.lower() == 'y': print(" 请在浏览器中:") print(" - 选择一个礼品") print(" - 点击兑换") print(" - 填写收货地址:") print(" * 收货人: 张三") print(" * 电话: 13800138000") print(" * 地址: 北京市朝阳区xxx街道xxx号") print(" - 确认兑换") input(" 完成后按 Enter 继续...") h5_page.screenshot(path=f'test_screenshots/12_h5_redeem_{int(time.time())}.png', full_page=True) # 13. 查看订单 print("\n13. 查看我的订单") print(" 请在浏览器中:") print(" - 导航到'我的订单'页面") print(" - 观察订单列表") print(" - 点击查看订单详情") input(" 完成后按 Enter 继续...") h5_page.screenshot(path=f'test_screenshots/13_h5_orders_{int(time.time())}.png', full_page=True) # ===== 测试后台订单管理 ===== if response.lower() == 'y': print("\n\n【测试:后台订单管理】") print("\n14. 管理后台处理订单") admin_page.bring_to_front() admin_page.goto(f"{admin_url}/orders") admin_page.wait_for_load_state('networkidle') print(" 请在浏览器中:") print(" - 查看订单列表") print(" - 筛选'待处理'订单") print(" - 点击刚才的订单'详情'") print(" - 尝试发货操作(输入物流单号: SF1234567890)") input(" 完成后按 Enter 继续...") admin_page.screenshot(path=f'test_screenshots/14_admin_order_manage_{int(time.time())}.png', full_page=True) print("\n\n" + "="*60) print("测试完成!") print("="*60) print(f"\n所有截图已保存到: test_screenshots/ 目录") print(f"测试账号信息:") print(f" 手机号: {test_phone}") print(f" 密码: 123456") if marketing_code: print(f" 使用的营销码: {marketing_code}") input("\n按 Enter 关闭浏览器...") browser.close() if __name__ == "__main__": import os os.makedirs('test_screenshots', exist_ok=True) manual_test()