auto_screenshot 从您的 Flutter 应用的移动平台(iOS 和 Android)抓取截图。它包含两个部分:

  1. 一个 Flutter 集成测试包的命令行包装器,允许您指定要运行的模拟器,然后让它们在您的机器上运行,而您可以去做其他事情。
  2. 库方法,让您只需一行代码即可将截图命令插入到您的集成测试中。

支持种子数据。如果您使用 go_router,可以轻松指定测试。

入门

您需要安装以下软件,并将相应的二进制文件放在您的 PATH 环境变量中:

  • Flutter – flutter
  • Xcode (仅限 MacOS) – xcrun
  • 模拟器 (Xcode 自带)
  • Android SDK 命令行工具 – emulator
  • Java – java

要安装,请将 auto_screenshot 添加到您的 pubspec.yaml 文件中的 dev_dependencies 部分。(如果您的 IDE 没有自动执行,请运行 flutter pub get)。

如果您还没有集成测试,请遵循 https://docs.flutterdart.cn/cookbook/testing/integration/introduction 上的说明。

命令

  • dart run auto_screenshot: 启动模拟器、运行集成测试并收集截图。确保您没有正在运行的模拟器。auto_screenshot 会按需启动模拟器并在完成后关闭它们。
  • dart run auto_screenshot:list_devices: 列出您可以在 auto_screenshot 配置中使用的所有有效设备名称。
  • dart run auto_screenshot:validate: 在不运行任何测试的情况下验证您的 auto_screenshot 配置。

配置

在您的 pubspec.yaml 文件中添加如下部分:

auto_screenshot:
  devices:
    - iPhone 8 Plus
    - iPhone 13 Pro Max
    - iPad Pro (12.9-inch) (2nd generation)
    - iPad Pro (12.9-inch) (5th generation)
    - Pixel_3a_API_33_arm64-v8a
    - Pixel_5_API_33

如果您的集成测试位于 <project root>/integration_test 目录下,并且您希望将截图保存到 <project root>/auto_screenshot 目录下,那么这就是您需要的全部配置。

  • devices – (必需) 一个设备名称数组。这些名称必须精确无误,不能有任何拼写错误。您可以通过运行 dart run auto_screenshot:list_devices 来获取有效设备名称列表。这假定您已经安装/创建了您想要使用的模拟器,但在使用 auto_screenshot 时它们不应该正在运行。
  • test_path – (可选) 从项目根目录到您的集成测试文件夹或文件的路径。默认为 integration_test
  • output_folder – (可选) 从项目根目录到所需截图输出文件夹的路径。默认为 auto_screenshot

用法

正在进行中...

支持

欢迎提交问题。请不要要求我扩大这个项目的范围,除非您愿意自己做这项工作、提交 PR 并加入维护团队。auto_screenshot 旨在运行在 MacOS 上,并从 iPhone 和 Android 模拟器(非实体设备)捕获截图。它不会将结果放置在框架内、添加文本或背景图片,也不会将资产上传到任何应用商店。

已知问题

MissingPluginException(No implementation found for method captureScreenshot on channel plugins.flutter.io/integration_test)

请参阅 flutter/flutter#91668。您需要打开 flutter/packages/integration_test/ios/Classes/IntegrationTestPlugin.m 文件,并将 registerWithRegistrar 方法更改为以下内容:

+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
    [[IntegrationTestPlugin instance] setupChannels:registrar.messenger];
}

是的,我知道。去给那个问题点赞吧。

开发

构建自动生成的 JSON 映射

dart run build_runner build

致谢

深受 flutter_launcher_icons 的启发。

GitHub

查看 Github