{"skill":{"slug":"3d-pet-checkout-test","displayName":"3D Pet Checkout Test","summary":"执行 3D Pet 宠物下单测试完整流程，包含登录、选择产品、上传图片、等待生成、验证结账。用于自动化测试 joyarti 3D 宠物产品购买流程。","description":"---\nname: 3d-pet-checkout-test\ndescription: 执行 3D Pet 宠物下单测试完整流程，包含登录、选择产品、上传图片、等待生成、验证结账。用于自动化测试 joyarti 3D 宠物产品购买流程。\n---\n\n# 3D Pet 下单测试\n\n执行 3D 宠物产品下单完整流程，验证购买路径是否正常。\n\n## 触发条件\n\n- 用户说\"测试3D宠物\"、\"测试下单\"、\"3D Pet test\"、\"运行工作流\"\n- cron 定时任务触发\n- 手动执行测试\n\n## 关键配置\n\n| 配置 | 环境变量 | 默认值 |\n|------|----------|--------|\n| 网站 | - | https://joyarti.com |\n| 账号邮箱 | JOYARTI_EMAIL | (无默认值，请设置) |\n| 账号密码 | JOYARTI_PASSWORD | (无默认值，请设置) |\n| 测试图片 | JOYARTI_IMAGE_URL | (可选) |\n| 推送目标 | FEISHU_TARGET | (无默认值，需配置) |\n\n## 环境变量设置\n\n在运行前设置环境变量（可选，如不设置则使用默认值）：\n\n```bash\nexport JOYARTI_EMAIL=\"your-email@example.com\"\nexport JOYARTI_PASSWORD=\"your-password\"\nexport JOYARTI_IMAGE_URL=\"https://example.com/image.jpg\"\nexport FEISHU_TARGET=\"chat:oc_xxxxxxxxxxxxxxxxxx\"\n```\n\n## 执行步骤\n\n### Step A: 登录\n1. navigate 到 https://joyarti.com/account/login\n2. wait 2000ms\n3. evaluate 填写邮箱密码并点击 Login\n4. wait 4000ms 等待跳转\n5. evaluate 验证登录成功（URL 含 /account）\n\n### Step B: 选择产品\n1. evaluate 点击导航 '3D Figure'\n2. wait 3000ms，验证 URL 含 figmaker\n3. evaluate 点击 'For Pets' **（必须用 BUTTON 元素）**\n4. wait 3000ms\n5. evaluate 点击 'Minimal Style' 的 Create 按钮 **（必须用 BUTTON 元素）**\n6. wait 3000ms，验证 URL 含 style2 且有文件上传框\n\n### Step C: 上传图片\n1. exec 下载图片到 /tmp/openclaw/uploads/pet_image.jpg\n2. exec 运行 CDP 上传脚本：\n   ```bash\n   CDP_SCRIPT=\"${WORKSPACE}/cdp_upload.py\"  # 或从 skill 目录读取\n   python3 \"$CDP_SCRIPT\" /tmp/openclaw/uploads/pet_image.jpg joyarti\n   ```\n   - 成功输出：`OK: files=1`\n   - 失败输出：`ERR: ...`\n3. wait 3000ms\n4. evaluate 点击 Create Preview 按钮\n\n### Step D: 等待生成\n1. **禁止用 browser wait 超过 20s**\n2. 用 exec + curl 轮询，每次 sleep 30s：\n   ```bash\n   sleep 30 && curl -s http://127.0.0.1:18800/json/list | python3 -c \"\n   import json,sys\n   tabs=json.load(sys.stdin)\n   for t in tabs:\n       if 'joyarti' in t.get('url','') and 'projectId' in t.get('url',''):\n           print('DONE:', t['url'])\n   \"\n   ```\n3. 检测输出含 `DONE:` 即生成完成，提取 projectId\n\n### Step E: 验证结账\n1. evaluate 点击 Buy Now\n2. wait 4000ms\n3. evaluate 验证跳转到 Shopify（URL 含 myshopify.com 或 checkout）\n4. evaluate 读取结账关键字段（产品、价格）\n5. 验证：产品含 'Pet'/'Figure'，价格含 '$89.99'\n6. **必须登出并关闭浏览器**\n\n## 消息规则\n\n每个 Step 开始和完成必须发消息到飞书群：\n\n```javascript\nmessage(action=send, channel=feishu, target=FEISHU_TARGET, message=\"...\")\n```\n\n- Step 开始：`⏳ Step X: xxx 开始...`\n- Step 完成：`✅ Step X: xxx 完成 — {关键结果}`\n- Step 失败：`❌ Step X: xxx 失败 — {原因}`\n\n## 最终报告模板\n\n```\n🧪 3D Pet 下单测试报告\n时间：{startTime}–{endTime}（约 {duration} 分钟）\n**账号：** JOYARTI_EMAIL\n\nA: 登录 - {结果}\nB: 选择产品 - {结果}\nC: 上传图片 - {结果}\nD: 3D 生成 - {结果}\nE: 结账验证 - {结果}\n\nprojectId: {projectId}\n产品: {product}\n价格: {price}\n\n结论：{通过/失败}\n```\n\n## 注意事项\n\n1. **点击必须用 BUTTON**：禁止点击 SPAN/DIV 元素，必须用 `querySelectorAll('button')` 限定\n2. **上传用 CDP 脚本**：`browser.upload()` 不触发 React onChange\n3. **生成等待用 exec**：禁止 `browser.act kind=wait timeMs>20000`\n4. **必须登出关闭浏览器**：确保下次测试干净\n5. **禁止点击 Place order/Pay now**：只验证不付款","topics":["测试"],"tags":{"3d":"1.0.0","automation":"1.0.0","latest":"1.0.0","testing":"1.0.0"},"stats":{"comments":0,"downloads":775,"installsAllTime":29,"installsCurrent":1,"stars":0,"versions":1},"createdAt":1773633250361,"updatedAt":1779078313814},"latestVersion":{"version":"1.0.0","createdAt":1773633250361,"changelog":"3D Pet 下单自动化测试 — 初始版本\n\n- 实现完整 3D Pet 宠物购买流程的自动化测试，包括登录、选品、上传图片、生成预览与结账验证\n- 支持飞书群消息通知，每步关键节点自动推送进度与结果\n- 配置项与环境变量集中管理，便于自定义测试账号与图片\n- 强调关键操作规范，如按钮点击、文件上传与轮询检测\n- 测试流程结束后，自动生成标准化报告","license":"MIT-0"},"metadata":null,"owner":{"handle":"jinxuanzhu","userId":"s17fdz1k8hjyn49tjtzb4q829d8846r8","displayName":"jinxuanzhu","image":"https://avatars.githubusercontent.com/u/39006238?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089911709}}