【问题标题】:Flutter test finished with error: ProcessException: Permission deniedFlutter 测试完成但出现错误:ProcessException: Permission denied
【发布时间】:2021-10-26 13:25:21
【问题描述】:

我正在尝试在我的设备上运行端到端测试,因此我必须通过 adb 请求访问位置的权限 当我从终端运行命令时,它按预期工作,但是当 dart:io 正在执行时,它会抛出这个异常(每个 adb 命令都是一样的)

环境:

  • MacOs
  • Android 工作室

代码:

void main() {
  group('Testing full app flow', () {
    IntegrationTestWidgetsFlutterBinding.ensureInitialized();

    setUpAll(() async {
      await Process.run('adb' , ['shell' ,'pm', 'grant', 'com.MYSERVICE', 'android.permission.ACCESS_FINE_LOCATION']); 
    });

    testWidgets('test the password input on real device/emulator', (tester) async {

     //TESTS

    });

  });
}

【问题讨论】:

    标签: android flutter android-studio dart adb


    【解决方案1】:

    我想出了如何正确地制作它: 现在 adb 命令需要在驱动程序中,因为测试正在设备上运行(而且它显然不能 adb 本身)

    应该是这样的:

    import 'dart:io';
    
    import 'package:integration_test/integration_test_driver.dart';
    
    Future<void> main() async {
      await Process.run('adb' , ['shell' ,'pm', 'grant', 'com.myapp','android.permission.ACCESS_FINE_LOCATION']);
      await Process.run('adb' , ['shell' ,'pm', 'grant', 'com.myapp','android.permission.ACCESS_COARSE_LOCATION']);
      await integrationDriver();
    }
    

    如此处所述:https://github.com/flutter/flutter/issues/12561

    我暂时没有在iOS上制作,但稍后会更新

    PS:运行命令还是:

    颤振驱动器
    --driver=integration_test/driver.dart
    --target=integration_test/app_test.dart
    -d 设备

    但 Flutter_blue 仍然认为蓝牙已禁用

    【讨论】:

      【解决方案2】:

      用超级用户试试:

      sudo flutter run
      

      【讨论】:

      • 它不起作用,因为它也不是(所有者)权利的问题,问题是当我的回答中解释的 diver_test 变成 integration_test 时,集成测试的结构发生了变化
      猜你喜欢
      • 2014-07-31
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2014-09-08
      • 1970-01-01
      相关资源
      最近更新 更多