如何在 dart 代码中执行 flutter 终端命令

Dha*_*ani 5 command flutter

我想自动化我的项目的测试。我需要截取屏幕截图并与其他屏幕截图进行比较。Flutter 命令将截取屏幕截图并将其保存到我的目录中。所以我想在 dart 而不是终端中执行该命令。

我在截取屏幕截图时遇到问题,已经使用了一些软件包,例如屏幕截图等......将无法工作。

PS D:\flut-237-screenshot\flutter-charts\flutter_charts\flutter_charts_testbed> flutter snapshot 写入 flutter_02.png (2797kB) 的屏幕截图。

我希望这个命令应该使用 dart 代码运行,而不是在终端中运行

dav*_*lin 5

Dart 的 io 包包含Process.run允许您从 Dart 运行终端命令的命令:

进程运行

如果您要截取应用程序的屏幕截图,您将执行以下操作:

import 'dart:io';

await Process.run('flutter', ['screenshot', '-o', 'image.jpg']);
Run Code Online (Sandbox Code Playgroud)

如果您想通过设置集成测试更直接地生成屏幕截图(这比flutter screenshot通过终端命令调用要快得多),这里有一些有用的参考资料,解释了如何通过 flutter 的集成测试框架获取应用程序快照:

https://medium.com/flutter-community/testing-flutter-ui-with-flutter-driver-c1583681e337

https://blog.codemagic.io/flutter-automated-screenshot-testing/

https://dev.to/mjablecnik/take-screenshot-during-flutter-integration-tests-435k

https://medium.com/@nocnoc/automated-screenshots-for-flutter-f78be70cd5fd

然而,以这种方式截取屏幕截图的局限性在于,只会捕获应用程序的 UI,而不会捕获应用程序外部可能出现的其他内容(例如本地和推送通知、基于操作系统时钟、日历的提醒警报等)您的应用程序可能会生成。)

另一方面,使用Process.run执行flutter screenshot将能够捕获手机显示屏上的所有内容,包括通知、基于系统的警报等。不过,获得正确的时机可能有点棘手,因为终端命令需要更长的时间完整捕获并保存屏幕截图。您仍然希望在集成测试驱动程序的上下文中执行此操作,以避免系统权限问题。


小智 4

有一个名为的包process_run允许您从代码中调用终端命令dart。以下是该包的链接: https: //pub.dev/packages/process_run 例如,如果您想执行告诉您 dart 版本的命令,您可以按以下方式使用该包:

await run('dart', ['--version'], verbose: true);