Flutter integration_test - 制作截图

Flutter integration_test - Making screenshot

嘿,当使用 integration_test 库 (https://pub.dev/packages/integration_test) 进行 UI 测试时,是否可以制作屏幕截图?

在flutter_driver中它是建立在服用它的方法中的。在这里我找不到。

我在 GitHub - https://github.com/flutter/flutter/issues/51890

上发现了一个未解决的问题

他们正在开发该功能。

从 Flutter 2.5.0 版本开始,您可以通过非常简单的方式进行屏幕截图。 这是有关如何操作的手册:https://dev.to/mjablecnik/take-screenshot-during-flutter-integration-tests-435k

The flutter integration test example has the skeleton to perform screenshots

首先为集成测试创建驱动程序

//test_driver/foo_test.dart
import 'dart:io';
import 'package:flutter_driver/flutter_driver.dart';
import 'package:integration_test/integration_test_driver_extended.dart';

Future<void> main() async {
  final FlutterDriver driver = await FlutterDriver.connect();
  await integrationDriver(
    driver: driver,
    onScreenshot: (String screenshotName, List<int> screenshotBytes) async {
      final File image =
          await File(screenshotName).create(recursive: true);
      image.writeAsBytesSync(screenshotBytes);
      return true;
    },
  );
}

然后在你的测试中

//integration_test/bar_test.dart
void main() {
  final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized()
      as IntegrationTestWidgetsFlutterBinding;

  testWidgets('screenshot', (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());
    await tester.pumpAndSettle();
    await binding.convertFlutterSurfaceToImage();
    await tester.pumpAndSettle();
    await binding.takeScreenshot('screenshots/screenshot.png');
  }
}

然后

flutter drive --driver=test_driver/foo_test.dart --target integration_test/bar_test.dart 

注:

  • 截图是png
  • 你不能在没有调整的情况下直接从测试中保存(解释驱动程序的必要性)