mcpField
T
textual-screenshot

textual-screenshot

github.com/langchain-ai测试与质量30.7k40 次安装今天更新
代码仓库

关于 textual-screenshot

Textual Screenshot 是面向 Textual 应用开发和测试的截图技能,可通过无头测试框架将应用呈现为 SVG。它支持驱动界面到指定状态,并强调使用可信本地代码、合成数据和独立的行为测试。

主要功能

  1. 01通过无头测试运行应用
  2. 02设置终端尺寸并驱动界面
  3. 03将界面保存为 SVG
  4. 04检查截图并清理临时文件

适用场景

  1. 01预览 Textual 应用的特定界面
  2. 02为界面状态生成 SVG 截图
  3. 03在视觉检查中避免使用浏览器自动化

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/langchain-ai/deepagents --skill textual-screenshot

安装后在 Claude Code 中输入/textual-screenshot确认已加载。

详细介绍

Textual 截图

使用 Textual 的无头测试框架渲染真实应用,将其操作到所需状态,并将合成的终端保存为 SVG。应优先采用此方法,而非浏览器自动化或操作系统级截图工具。

截图流程

  1. 确定 App 类,以及能够到达所需 UI 的最简且可信的本地设置。
  2. 在代码仓库之外编写临时 Python 脚本。除非用户明确要求提交截图作为产物,否则生成的截图应保留在代码仓库之外。
  3. 使用 app.run_test(size=(columns, rows)) 以确定的终端尺寸启动应用。
  4. 在启动后以及每次改变可见状态的操作后调用 await pilot.pause()。在可行时,使用 pilot.press(...) 模拟真实的交互路径;若只是聚焦预览,可直接调用应用方法。
  5. 在目标状态可见时调用 app.save_screenshot(output_path)。路径应使用 .svg 后缀。
  6. 检查生成的 SVG,并在分享前确认其文件大小合理。
  7. 不再需要时,删除临时脚本和截图文件。

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