Flutter屏幕截图插件screenshots的使用
Flutter屏幕截图插件screenshots的使用
简介
screenshots
是一个独立的命令行工具和包,用于为 Flutter 应用捕获屏幕截图。它结合了 Fastlane 的三个工具(Snapshots、Screengrab 和 FrameIt)的功能,支持跨平台(iOS 和 Android)的自动化屏幕截图生成,并且可以将截图放入设备框架中。
特性
- 兼容现有测试:只需在测试中添加一行代码即可捕获屏幕截图。
- 多设备支持:可以选择运行的设备(真实设备或模拟器),并自动处理。
- 多语言支持:如果应用支持多种语言,可以配置不同语言的截图。
- 框架支持:可选地将截图放入设备框架中。
- 状态栏清理:每张生成的截图都会有一个干净的状态栏。
- 与 Fastlane 集成:可以直接将截图上传到应用商店。
- 跨平台一次运行:支持同时捕获 iOS 和 Android 平台的截图。
安装
在 macOS 上:
brew update && brew install imagemagick
pub global activate screenshots
在 Linux 上:
# Debian, Ubuntu 或 Linux Mint
sudo apt-get install imagemagick
# Fedora, CentOS 或 RHEL
sudo yum install ImageMagick
# OpenSUSE
sudo zypper install imagemagick
pub global activate screenshots
在 Windows 上:
choco install imagemagick.app
pub global activate screenshots
如果系统找不到 pub
命令,请将其路径添加到环境变量中:
- macOS/Linux:
export PATH="<flutter安装目录>/bin/cache/dart-sdk/bin:$PATH"
- Windows:
set PATH=<flutter安装目录>\flutter\bin\cache\dart-sdk\bin;%APPDATA%\Pub\Cache\bin;%PATH%
注意:在 Windows 或 Linux 上只能运行 Android 设备/模拟器。如果需要运行 macOS,可以在支持 macOS 的 CI 工具上执行。
使用方法
运行 screenshots
命令:
screenshots
如果需要指定配置文件路径:
screenshots -c <配置文件路径>
其他选项:
usage: screenshots [-h] [-c <config file>] [-m <normal|recording|comparison|archive>] [-f <flavor>] [-b <true|false>] [-v]
-c, --config=<screenshots.yaml> 配置文件路径,默认为 "screenshots.yaml"
-m, --mode=<normal|recording|comparison|archive> 模式选择:
- recording: 保存截图以供后续比较
- comparison: 将新截图与已记录的进行比较
- archive: 存档截图,无法通过 Fastlane 上传
默认模式为 normal
-f, --flavor=<flavor name> 指定风味名称
-b, --build=<true|false> 是否强制重新构建和安装应用
-v, --verbose 显示详细日志
-h, --help 显示帮助信息
修改测试以适配 Screenshots
为了捕获截图,需要在测试中调用 screenshots
提供的特殊函数。
-
在
pubspec.yaml
文件的dev_dependencies
中添加screenshots
:screenshots: ^<当前版本号>
-
在测试代码中:
- 导入
screenshots
包:import 'package:screenshots/screenshots.dart';
- 创建
Config
对象:final config = Config();
- 调用
screenshot
方法来捕获截图:await screenshot(driver, config, 'myscreenshot1');
- 导入
确保截图名称在整个测试中唯一。
示例代码
以下是一个完整的示例代码,展示了如何使用 screenshots
插件捕获屏幕截图:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_driver/flutter_driver.dart';
import 'package:screenshots/screenshots.dart';
void main() {
// 初始化 Flutter Driver
FlutterDriver driver;
setUpAll(() async {
driver = await FlutterDriver.connect();
});
tearDownAll(() async {
if (driver != null) {
await driver.close();
}
});
test('Capture screenshot', () async {
// 创建 Config 对象
final config = Config();
// 捕获截图
await screenshot(driver, config, 'example_screenshot');
});
}
配置文件
screenshots.yaml
是 screenshots
的配置文件,定义了测试文件、设备列表等信息:
# 测试文件列表
tests:
- test_driver/main1.dart
- test_driver/main2.dart
# 截图临时存储位置
staging: /tmp/screenshots
# 支持的语言列表
locales:
- en-US
- de-DE
# 设备配置
devices:
ios:
iPhone XS Max:
frame: false
iPad Pro (12.9-inch) (3rd generation):
orientation: LandscapeRight
android:
Nexus 6P:
# 是否启用设备框架
frame: true
记录/对比模式
要监控界面的变化,可以使用记录/对比模式:
- 在
screenshots.yaml
中添加记录目录:recording: /tmp/screenshots_record
- 运行记录命令:
screenshots -m recording
- 后续运行对比命令:
screenshots -m comparison
归档模式
归档模式用于本地生成截图,例如生成 UI 变化的报告:
- 在
screenshots.yaml
中添加归档目录:archive: /tmp/screenshots_archive
- 运行归档命令:
screenshots -m archive
更多关于Flutter屏幕截图插件screenshots的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter屏幕截图插件screenshots的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,screenshots
是一个用于自动化截屏和生成屏幕截图的插件。它可以帮助你在不同的设备和屏幕尺寸上自动截取应用的截图,并且可以用于生成应用商店所需的截图。
安装 screenshots
插件
-
在
pubspec.yaml
文件中添加依赖:dependencies: flutter: sdk: flutter screenshots: ^2.0.0
-
运行
flutter pub get
来安装依赖。
配置 screenshots
-
在项目根目录下创建一个
screenshots.yaml
文件,用于配置screenshots
插件。# screenshots.yaml # 配置截图设备 devices: ios: - iPhone 12 Pro Max - iPhone SE (2nd generation) android: - Nexus 6P # 配置截图存储路径 staging: /path/to/staging/dir # 配置截图后的处理 post_processing: - command: "xcrun simctl io booted screenshot" device: "iPhone 12 Pro Max"
-
在
pubspec.yaml
中添加screenshots
的配置:flutter: assets: - screenshots.yaml
使用 screenshots
-
在你的 Flutter 项目中,使用
screenshots
提供的 API 来触发截图。import 'package:screenshots/screenshots.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 初始化 screenshots final screenshots = Screenshots(); // 截取当前屏幕 await screenshots.capture('screenshot_name'); }
-
运行
screenshots
命令来生成截图:flutter pub run screenshots
这个命令会根据
screenshots.yaml
中的配置,自动在不同的设备上截取屏幕截图,并保存到指定的目录中。
自动化截图
你可以将 screenshots
集成到 CI/CD 管道中,自动化生成应用截图。例如,在 GitHub Actions 中,你可以添加以下步骤:
name: Screenshots
on: [push]
jobs:
screenshots:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.1'
- run: flutter pub get
- run: flutter pub run screenshots