我的应用程序是基本计数器,带有用于 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/