FlutterDriver.Connect 需要 VM_SERVICE_URL 还是字符串?

标签 flutter flutter-test flutterdriver

我的应用程序是基本计数器,带有用于 UI 自动化的 FlutterDriver。我的难题是当我尝试运行测试时,它告诉我需要指定连接或设置 VM_SERVICE_URL

错误:

DriverError: Could not determine URL to connect to application. Either the VM_SERVICE_URL environment variable should be set, or an explicit URL should be provided to the FlutterDriver.connect() method.

我已经尝试了一些东西。

  • 使用 FlutterDriver.connect();
  • 在终端 (MacOS) 中设置 VM_SERVICE_URL
  • 设置 Dart 命令行以包含带有值的 VM_SERVICE_URL

我最成功的是下面的代码。通过将 enableFlutterDriverExtension 添加到 lib/main.dart,然后执行 lib/main.dart,我可以将 ws://127.0.0.1 连接复制/粘贴到 test/my_test.dart。这使我能够成功运行我的测试,但这不是一个理想的过程。

有没有办法自动拉入连接字符串?

为什么 Platform.environment['VM_SERVICE_URL'] 总是返回 null,尽管我已经设置了它?

lib/main.dart

void main() {

  enableFlutterDriverExtension();
  runApp(const MyApp());
}

测试/main_app.dart

void main() {
//  enableFlutterDriverExtension();
  MainApp.main();
  MyTest.main();

}

测试/my_test.dart

void main() {

  FlutterDriver? driver;

  dynamic DartVmServiceUrl;
  DartVmServiceUrl ??= Platform.environment['VM_SERVICE_URL'];
  print('VM_SERVICE_URL:\t${DartVmServiceUrl}');
  String vmServURL = 'ws://127.0.0.1:59488/WK8KTNVXXOo=/ws';

  setUpAll( () async {
    driver = await FlutterDriver.connect(dartVmServiceUrl: vmServURL);
  });

  tearDownAll( () {
    driver?.close();
  });

  test('Push Button',() async {
    var pushMeButton = find.byValueKey('IncrementButton');
    await driver!.tap(pushMeButton);

  }  );


}

最佳答案

你必须移动你在下面看到的特定文件夹中的文件,然后尝试从终​​端运行

flutter drive \
--driver=test/my_test.dart \
--target=test_driver/test_driver.dart

在你的 lib/main.dart 中你不需要 enableFlutterDriverExtension(); 因为它已经链接到你在 test_driver.dart 中的 main()

你的 main in test_driver/test_driver.dart 应该是这样的:

import 'package:{here}/main.dart' as app; // insert here your main app
import 'package:flutter_driver/driver_extension.dart';

void main() {
  enableFlutterDriverExtension();
  app.main();
}

你的 my_test.dart 应该是这样的:

import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

void main() {
  late FlutterDriver driver;

  setUpAll(() async {
    driver = await FlutterDriver.connect();
  });

  tearDownAll(() {
    driver.close();
  });

  test('check flutter driver health', () async {
    Health health = await driver.checkHealth();
    print(health.status);
  });
}

请注意使用正确的包以避免此错误。

Error: Not found: 'dart:ui' import 'dart:ui';

关于FlutterDriver.Connect 需要 VM_SERVICE_URL 还是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69817166/

相关文章:

Flutter 抛出异常 BoxConstraints 强制无限宽度

flutter - 在ThemeData中指定字体大小时如何根据屏幕宽度执行动态字体大小?

command-line-arguments - Flutter Driver - 我们可以将命令行参数传递给 Flutter 驱动程序测试吗

flutter-web:通过 Location 插件在网络上获取位置

flutter 底溢出

ios - TestLab for iOS 中的 Flutter Integration 测试 - Use cases is not divided in iOS

flutter-alertdialog - Flutter Driver - 未找到 Flutter AlertDialog 及其元素

testing - 使用 flutter 驱动程序中的系统后退按钮

Flutter Desktop——系统托盘实现

flutter - Dart/Flutter : Navigate (with Navigator) between Pages without context (so no Navigator. 推送?)