Flutter 测试完成但出现错误:ProcessException: Permission denied

Posted

技术标签:

【中文标题】Flutter 测试完成但出现错误:ProcessException: Permission denied【英文标题】:Flutter test finished with error: 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

    );

  );

【问题讨论】:

【参考方案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 时,集成测试的结构发生了变化

以上是关于Flutter 测试完成但出现错误:ProcessException: Permission denied的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 驱动程序:未找到测试文件

尝试在 Flutter 中获取地点的自动完成位置并在点击的地点上显示详细信息时出现空安全错误

使用 Firebase 托管部署我的 Flutter Web 应用程序后出现错误

Flutter:我正在尝试使用扩展类包装 Text 小部件,但出现“未定义命名参数‘child’”错误

为什么运行后Flutter上出现“无法执行aapt”错误?

在Flutter上运行测试显示'错误:没有Bazel目标集'