关于 textual-screenshot
Textual Screenshot 是面向 Textual 应用开发和测试的截图技能,可通过无头测试框架将应用呈现为 SVG。它支持驱动界面到指定状态,并强调使用可信本地代码、合成数据和独立的行为测试。
主要功能
- 01通过无头测试运行应用
- 02设置终端尺寸并驱动界面
- 03将界面保存为 SVG
- 04检查截图并清理临时文件
适用场景
- 01预览 Textual 应用的特定界面
- 02为界面状态生成 SVG 截图
- 03在视觉检查中避免使用浏览器自动化
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ langchain-ai/ deepagents --skill textual-screenshot安装后在 Claude Code 中输入/textual-screenshot确认已加载。
详细介绍
Textual 截图
使用 Textual 的无头测试框架渲染真实应用,将其操作到所需状态,并将合成的终端保存为 SVG。应优先采用此方法,而非浏览器自动化或操作系统级截图工具。
截图流程
- 确定
App类,以及能够到达所需 UI 的最简且可信的本地设置。 - 在代码仓库之外编写临时 Python 脚本。除非用户明确要求提交截图作为产物,否则生成的截图应保留在代码仓库之外。
- 使用
app.run_test(size=(columns, rows))以确定的终端尺寸启动应用。 - 在启动后以及每次改变可见状态的操作后调用
await pilot.pause()。在可行时,使用pilot.press(...)模拟真实的交互路径;若只是聚焦预览,可直接调用应用方法。 - 在目标状态可见时调用
app.save_screenshot(output_path)。路径应使用.svg后缀。 - 检查生成的 SVG,并在分享前确认其文件大小合理。
- 不再需要时,删除临时脚本和截图文件。
deepagents-code 最简示例:
import asyncio
import os
from pathlib import Path
from tempfile import TemporaryDirectory
from unittest.mock import AsyncMock, MagicMock, patch
async def main() -> None:
output = Path("/tmp/dcode-ui.svg")
with TemporaryDirectory() as profile:
os.environ["DEEPAGENTS_HOME"] = profile
from deepagents_code.app import DeepAgentsApp
app = DeepAgentsApp(agent=MagicMock())
with patch.object(app, "_post_paint_init", new=AsyncMock()):
async with app.run_test(size=(110, 36)) as pilot:
await pilot.pause()
await app._handle_command("/model")
await pilot.pause()
app.save_screenshot(output)
print(output)
asyncio.run(main())
请在 libs/code 目录下运行,以便项目环境和可编辑包能够正确解析:
uv run python /tmp/capture_dcode_ui.py
仅需调整应用构造函数以及打开目标状态的操作。对于独立的 Textual 应用,导入其 App 子类,并使用相同的 run_test/save_screenshot 流程。
可靠性与安全性
- 仅使用可信的本地应用代码。无头应用仍可能运行启动钩子、子进程或网络调用。对于
DeepAgentsApp,在导入deepagents_code之前,将DEEPAGENTS_HOME设置为临时目录,并在挂载前模拟_post_paint_init;仅替换 agent 无法隔离启动时的副作用。 - 切勿捕获机密信息、凭据、私人对话内容或无关的用户数据。仅填入预览所需的合成内容。
- 选择有限的终端尺寸;先从
(110, 36)开始,仅当目标内容被截断或浪费大量空间时再进行调整。 - 等待 worker、动画和模态框过渡完全结束。应添加另一个
await pilot.pause(),而不是使用任意的 sleep。 - 不要将生成的 SVG 视为交互功能正常的证明。行为应使用常规 Textual 测试验证,截图仅用于视觉检查。
- 不要手动编辑 SVG。应复现预期的应用状态并重新截图。
评论
支持 Markdown