auto_screenshot 从您的 Flutter 应用的移动平台(iOS 和 Android)抓取截图。它包含两个部分:
- 一个 Flutter 集成测试包的命令行包装器,允许您指定要运行的模拟器,然后让它们在您的机器上运行,而您可以去做其他事情。
- 库方法,让您只需一行代码即可将截图命令插入到您的集成测试中。
支持种子数据。如果您使用 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 的启发。