在Flutter端到端测试中允许权限对话框?

nimxete2  于 2023-03-24  发布在  Flutter
关注(0)|答案(4)|浏览(138)

在Flutter端到端测试中,在测试过程中允许一个权限。driver.tap(find.text("ALLOW")不起作用。如何点击“允许”。

kzmpq1sx

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();
});
ffvjumwh

ffvjumwh2#

如果您使用的是最新的*Flutter集成测试***,则其他答案对您没有帮助,因为我们不需要 FlutterDriver 连接。
所以现在,您需要在
test_driver.dart**文件中添加以下代码,我们在其中初始化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:**包含测试文件。

flutter drive --driver=test_driver/test_driver.dart --target=integration_test/my_test.dart
3xiyfsfu

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();
    });
lymnna71

lymnna714#

尝试Patrol-它使像你这样的情况很容易处理!
1.首先,set up Patrol in your app
1.安装patrol_cli-dart pub global activate patrol_cli
一旦你完成了初始设置,你就可以在测试中写:

await $.native.grantPermissionWhenInUse();

要运行此测试,只需键入patrol test
与Susovan、apaatsio和Jitesha的其他答案不同,Patrol适用于iOS和Android

完整代码示例

// 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 test

更多关于巡逻

Patrol is available on pub.devhas extensive documentation.Here's a succinct overview的原生特性。
除了与本地功能交互外,Patrol还具有:

相关问题