Kab*_*bir 6 android integration-testing android-permissions flutter
我正在尝试为我的位置应用程序编写内容integration_test。我需要允许我的integration_test 的位置权限。
我已经ANDROID_SDK_ROOT在我的windows环境变量中设置了。我已经从命令提示符和 Android Studio 终端进行了测试,两者都显示良好。https://i.ibb.co/4gDPs3Z/echo-android-sdk-root.jpg
不幸的是,我 ANDROID_SDK_ROOT从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();
}
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激。提前致谢。
小智 7
这是行不通的,因为 envVars 会给你执行它的系统的环境变量。由于您在模拟器中执行,因此平台是 Android [print(Platform.isAndroid)并参见]此外,如果您进行调试,您将看到环境变量未设置。
正如您可能已经想到的,集成测试无法与本机弹出窗口交互。所以以下是我发现解决这个问题的唯一方法
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();
}
Run Code Online (Sandbox Code Playgroud)
flutter drive --driver=test_driver/integration_test_driver.dart --target=integration_test/app_test.dartadb shell pm revoke com.example.aries_fe android.permission.ACCESS_COARSE_LOCATIONtester.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
Run Code Online (Sandbox Code Playgroud)
setUpApp()也不行。