用途
webapp-testing 是一个用于与本地 Web 应用交互并进行测试的工具包,基于 Playwright 构建。它面向需要验证前端功能、调试 UI 行为以及捕获页面信息的场景,通过编写原生 Python Playwright 脚本来完成对本地 Web 应用的自动化测试。
主要能力
- 验证前端功能。
- 调试 UI 行为。
- 捕获控制台日志等信息(资料中提到 console_logging.py 用于在自动化过程中捕获控制台日志)。
- 提供辅助脚本 scripts/with_server.py,用于管理服务器生命周期,并支持同时管理多个服务器。
- 提供示例参考文件,覆盖常见模式:element_discovery.py(发现页面上的按钮、链接和输入框)、static_html_automation.py(对本地 HTML 使用 file:// URL)、console_logging.py(自动化过程中捕获控制台日志)。
使用方式
首先要决定采用哪种测试方式,依据以下决策树:
- 用户任务 → 是否为静态 HTML?
- 是 → 直接读取 HTML 文件以识别选择器;若成功,则使用这些选择器编写 Playwright 脚本;若失败或不完整,则按动态应用处理。
- 否(动态 Web 应用)→ 服务器是否已在运行?
- 否 → 运行
python scripts/with_server.py --help,然后使用该辅助脚本并编写简化后的 Playwright 脚本。 - 是 → 采用“先侦察后操作”模式:导航并等待 networkidle;截图或检查 DOM;从渲染后的状态中识别选择器;使用发现的选择器执行操作。
- 否 → 运行
辅助脚本应先运行 --help 查看用法。资料明确指出:不要先阅读源码,除非在尝试运行脚本后确认必须自定义解决方案。这些脚本可能体积很大,会污染上下文窗口;它们应作为黑盒脚本直接调用,而不是读入上下文窗口。
使用 with_server.py 启动服务器(先运行 --help,再使用辅助脚本):
单服务器:
python scripts/with_server.py --server "npm run dev" --port 5173 -- python your_automation.py
多服务器(例如后端 + 前端):
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
创建自动化脚本时只包含 Playwright 逻辑(服务器由辅助脚本自动管理):
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True) # Always launch chromium in headless mode
page = browser.new_page()
page.goto('http://localhost:5173') # Server already running and ready
page.wait_for_load_state('networkidle') # CRITICAL: Wait for JS to execute
# ... your automation logic
browser.close()
“先侦察后操作”模式:
- 检查渲染后的 DOM:
page.screenshot(path='/tmp/inspect.png', full_page=True)
content = page.content()
page.locator('button').all()
- 从检查结果中识别选择器。
- 使用发现的选择器执行操作。
常见陷阱:
- 错误做法:在动态应用上还未等待 networkidle 就检查 DOM。
- 正确做法:在检查之前先执行
page.wait_for_load_state('networkidle')。
最佳实践:
- 将捆绑脚本当作黑盒使用。为完成任务,先考虑 scripts/ 中的脚本是否能提供帮助。这些脚本能可靠地处理常见且复杂的工作流,同时不会挤占上下文窗口。用
--help查看用法,然后直接调用。 - 使用
sync_playwright()编写同步脚本。 - 完成后始终关闭浏览器。
- 使用描述性选择器:text=、role=、CSS 选择器或 ID。
- 添加适当的等待:
page.wait_for_selector()或page.wait_for_timeout()。
适用场景
- 验证本地 Web 应用的前端功能。
- 调试 UI 行为。
- 捕获控制台日志。
- 测试静态 HTML 页面(可使用 file:// URL,参见 static_html_automation.py)。
- 测试需要自行启动前后端服务的动态 Web 应用(借助 with_server.py 管理服务器生命周期)。
限制
资料中未提供关于收费、价格、平台支持范围、性能效果等方面的信息,暂未提供。仅提供了上述基于 Playwright 的本地 Web 应用测试能力与使用方式。