gpt4 book ai didi

android - 来自集成测试的 flutter 位置权限不起作用

转载 作者:行者123 更新时间:2023-12-04 23:55:35 24 4
gpt4 key购买 nike

我正在尝试写 integration_test对于我的位置应用程序。我需要允许来自我的 integration_test 的位置许可。
我设置了ANDROID_SDK_ROOT在我的 Windows 环境变量中。我已经从命令提示符和 Android Studio 终端进行了测试,两者都显示良好。 https://i.ibb.co/4gDPs3Z/echo-android-sdk-root.jpg
不幸的是,我收到了 ANDROID_SDK_ROOT值(value) null来自 Platform.environment .我已附上屏幕截图 https://i.ibb.co/t2Y3fBc/android-sdk-root-not-found.jpg
如果我硬编码 envVars到我的 windows 机器的 android 位置 C:/Users/User/AppData/Local/Android/Sdk/platform-tools/adb.exe ,然后它抛出错误No such file or directory Command: C:/Users/User/AppData/Local/Android/Sdk/platform-tools/adb.exe shell pm grant com.dealerapp.mlink android.permission.ACCESS_COARSE_LOCATION下面是我的源代码

Future<void> grantLocationPermission() async{

final Map<String, String> envVars = Platform.environment;
print('evnVars = $envVars');
print('ANDROID_SDK_ROOT = ${envVars['ANDROID_SDK_ROOT']}');
final String adbPath = envVars['ANDROID_SDK_ROOT']! + '/platform-tools/adb.exe';

await Process.run(adbPath, [
'shell',
'pm',
'grant',
'com.abcd.efgh', //my app package
'android.permission.ACCESS_COARSE_LOCATION'
]);
await Process.run(adbPath, [
'shell',
'pm',
'grant',
'com.abcd.efgh', //my app package
'android.permission.ACCESS_FINE_LOCATION'
]);
await integrationDriver();
}
任何建议将不胜感激。提前致谢。

最佳答案

这将不起作用,因为 envVars 将为您提供执行它的系统的环境变量。而且由于您在模拟器中执行,因此平台是 Android [ print(Platform.isAndroid)看看]
此外,如果您调试,您将看到未设置环境变量。
正如您可能已经想到的那样,集成测试无法与原生弹出窗口交互。所以以下是我发现解决这个问题的唯一方法

  • 有一个测试驱动程序:我只能使用
  • 下面的步骤来解决问题
  • 创建文件夹“test_driver”
  • 添加文件“integration_test_driver.dart”
  • 在文件中添加以下内容
  • Future<void> main() async {
    await Process.run(
    'adb',
    [
    'shell',
    'pm',
    'grant',
    'com.example.<your app name>', // TODO: Update this
    'android.permission.ACCESS_COARSE_LOCATION'
    ],
    );
    // TODO: Add more permissions as required
    await integrationDriver();
    }
  • 创建文件夹“integration_test”
  • 添加文件“app_test.dart”并在此处添加您的测试
  • 使用命令运行测试flutter drive --driver=test_driver/integration_test_driver.dart --target=integration_test/app_test.dart
  • 您只需执行一次,之后直接从测试资源管理器运行测试将不会显示弹出
  • 要再次显示对话框,请在终端中使用以下命令撤销权限adb shell pm revoke com.example.aries_fe android.permission.ACCESS_COARSE_LOCATION
  • 粗暴方式(不建议)
  • 找到 x,y 坐标,您可以在其中看到要单击的选项弹出
  • 调用tester.tapAt(const Offset(x,y))在你的测试中


  • 笔记:
  • 以下行的脚本不起作用。我想知道为什么这不起作用。将对此进行进一步调查。
  • adb shell pm grant com.example.<your app name> android.permission.ACCESS_COARSE_LOCATION 
    flutter test integration_test/login_test.dart
  • setUpApp()也不起作用。
  • 关于android - 来自集成测试的 flutter 位置权限不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71597057/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com