webapp-testing

其他 已审计 @anthropics
信任分
94/100
兼容 Agent
1
许可证
Complete terms in LICENSE.txt
速查档案 只列事实:领域、Agent、信任分、作者、原文章节。装与不装请看下方作者解读。
领域
通用
兼容 Agent
Claude Code
信任分
94 / 100 · 已通过审计
作者 / 版本 / 许可
@anthropics · Complete terms in LICENSE.txt
安装命令数
1 条

需要注意: 未限定 allowed-tools,默认拥有全部工具权限。

想读作者英文原文? ↓ 滚到正文区切换 · 在 GitHub 查看 ↗

解读由编辑根据原文凝练而成,命令、链接、术语均与作者原文一致;想看完整论述请切到右侧

webapp-testing 是给本地 webapp 写 Native Python Playwright 脚本 的指南。作者特意要求:永远先 --help 看 helper script 怎么用不要直接读它的源——脚本可能很大,读了就污染你的 context。脚本是黑箱被调,不是被 ingest。

设计思路

把 webapp 测试拆成两条路径——静态 HTML 直接读 HTML 找 selector;动态 webapp 走 Reconnaissance-then-Action(先探后做)。生命周期问题用 scripts/with_server.py 这个 helper 自动起停 server,写自动化脚本时只管 Playwright 逻辑。

Decision Tree

  • 静态 HTML?
    • 是 → 直接读 HTML 找 selector;不全 / 失败 → 当作动态处理
    • 否(动态)→ server 已经起着?
      • 否 → python scripts/with_server.py --help 然后用 helper + 写简化 Playwright 脚本
      • 是 → Reconnaissance-then-action:① navigate + wait_for_load_state('networkidle');② screenshot 或检 DOM;③ 从渲染后的状态找 selector;④ 用发现的 selector 执行动作

多 server 场景

作者给的最实用例子是同时起 backend + frontend:

python scripts/with_server.py \
  --server "cd backend && python server.py" --port 3000 \
  --server "cd frontend && npm run dev" --port 5173 \
  -- python your_automation.py

helper 管 server 启停,automation 脚本里只放 Playwright 逻辑:p.chromium.launch(headless=True)page.goto(...)page.wait_for_load_state('networkidle') → 操作 → browser.close()

关键原则

page.wait_for_load_state('networkidle')必跑的——动态 webapp 的 JS 要时间执行,不等就 selector 找不到;headless 永远 chromium headless,方便 CI;写脚本前 screenshot('/tmp/inspect.png', full_page=True) 看真实渲染状态再决定 selector,比凭脑想准多了。

适合的场景

  • 给本地 webapp 写端到端测试脚本
  • 多 server(前后端)需要并行起停的项目
  • 想把测试沉淀成可复用 Python 脚本,而不是依赖 GUI 工具

何时不要用

  • 仅做手动验证、不打算保留脚本:用 qa / qa-only 更对口
  • 仅测 API(无 UI):直接 requests / 同等 HTTP 客户端跑断言

配套

qa / qa-only(gstack 的 browser QA 入口,与本技能互补)、scrape(同基于浏览器自动化的另一面)、web-artifacts-builder(artifact 自身的 Playwright 验证)、setup-browser-cookies(要登录态时配套)。