在Flutter端到端测试中,在测试过程中允许一个权限。driver.tap(find.text("ALLOW")不起作用。如何点击“允许”。
driver.tap(find.text("ALLOW")
kzmpq1sx1#
您可以在运行测试之前授予权限。
import 'dart:io'; import 'package:path/path.dart'; // ... setUpAll(() async { final envVars = Platform.environment; final adbPath = join( envVars['ANDROID_SDK_ROOT'] ?? envVars['ANDROID_HOME'], 'platform-tools', Platform.isWindows ? 'adb.exe' : 'adb', ); await Process.run(adbPath, [ 'shell', 'pm', 'grant', 'com.example.yourapp', // replace with your app id 'android.permission.RECORD_AUDIO' ]); driver = await FlutterDriver.connect(); });
ffvjumwh2#
如果您使用的是最新的*Flutter集成测试***,则其他答案对您没有帮助,因为我们不需要 FlutterDriver 连接。所以现在,您需要在test_driver.dart**文件中添加以下代码,我们在其中初始化integrationDriver()
integrationDriver()
Future<void> main() async { final Map<String, String> envVars = Platform.environment; String? adbPath = join(envVars['ANDROID_SDK_ROOT'] ?? envVars['ANDROID_HOME']!, 'platform-tools', Platform.isWindows ? 'adb.exe' : 'adb', ); await Process.run(adbPath , ['shell' ,'pm', 'grant', 'com.example', 'android.permission.CAMERA']); await Process.run(adbPath , ['shell' ,'pm', 'grant', 'com.example', 'android.permission.WRITE_EXTERNAL_STORAGE']); await integrationDriver(); }
这一更改是必需的,因为FlutterDriver在您初始化并连接它之后就建立了连接,但是新的集成测试流已经有了一个连接,因此我们需要在连接发生之前对其进行初始化。要运行代码,请在终端上使用下面的命令,如您所见,为了获得更好的结果,我创建了两个文件夹,1.**test_driver:**包含上面提到的驱动程序代码。1.**integration_test:**包含测试文件。
FlutterDriver
flutter drive --driver=test_driver/test_driver.dart --target=integration_test/my_test.dart
3xiyfsfu3#
对我来说上面的代码是不工作不知道为什么
然后我尝试与下面的代码和它的工作
setUpAll(() async { await Process.run('add_adb_path/adb.exe' , ['shell' ,'pm', 'grant', 'add_app_package_name', 'android.permission.ACCESS_MEDIA_LOCATION']); await Process.run('add_adb_path/adb.exe' , ['shell' ,'pm', 'grant', 'add_app_package_name', 'android.permission.READ_EXTERNAL_STORAGE']); await Process.run('add_adb_path/adb.exe' , ['shell' ,'pm', 'grant', 'add_app_package_name', 'android.permission.WRITE_EXTERNAL_STORAGE']); driver = await FlutterDriver.connect(); });
lymnna714#
尝试Patrol-它使像你这样的情况很容易处理!1.首先,set up Patrol in your app1.安装patrol_cli-dart pub global activate patrol_cli一旦你完成了初始设置,你就可以在测试中写:
dart pub global activate patrol_cli
await $.native.grantPermissionWhenInUse();
要运行此测试,只需键入patrol test。与Susovan、apaatsio和Jitesha的其他答案不同,Patrol适用于iOS和Android。
patrol test
// integration_test/recording_test.dart import 'package:patrol/patrol.dart'; void main() { patrolTest( // patrolTest() instead of testWidgets() 'records sounds and saves it to internal storage', nativeAutomation: true, (PatrolTester $) async { // PatrolTester instead of WidgetTester await $.pumpWidget(YourAppWidget()); // replace with your own await $('Record').tap(); // Patrol's custom finders syntax (optional) await $.native.grantPermissionWhenInUse(); }, ); }
要运行它:
Patrol is available on pub.dev和has extensive documentation.Here's a succinct overview的原生特性。除了与本地功能交互外,Patrol还具有:
patrol develop
4条答案
按热度按时间kzmpq1sx1#
您可以在运行测试之前授予权限。
ffvjumwh2#
如果您使用的是最新的*Flutter集成测试***,则其他答案对您没有帮助,因为我们不需要 FlutterDriver 连接。
所以现在,您需要在test_driver.dart**文件中添加以下代码,我们在其中初始化
integrationDriver()
这一更改是必需的,因为
FlutterDriver
在您初始化并连接它之后就建立了连接,但是新的集成测试流已经有了一个连接,因此我们需要在连接发生之前对其进行初始化。要运行代码,请在终端上使用下面的命令,如您所见,为了获得更好的结果,我创建了两个文件夹,
1.**test_driver:**包含上面提到的驱动程序代码。
1.**integration_test:**包含测试文件。
3xiyfsfu3#
对我来说上面的代码是不工作不知道为什么
然后我尝试与下面的代码和它的工作
lymnna714#
尝试Patrol-它使像你这样的情况很容易处理!
1.首先,set up Patrol in your app
1.安装patrol_cli-
dart pub global activate patrol_cli
一旦你完成了初始设置,你就可以在测试中写:
要运行此测试,只需键入
patrol test
。与Susovan、apaatsio和Jitesha的其他答案不同,Patrol适用于iOS和Android。
完整代码示例
要运行它:
更多关于巡逻
Patrol is available on pub.dev和has extensive documentation.Here's a succinct overview的原生特性。
除了与本地功能交互外,Patrol还具有:
patrol develop
command, which supports Hot Restart集成测试,加快开发周期