集成测试的颤动位置权限不起作用
flutter location permission from integration test not working
我正在尝试为我的位置应用编写 integration_test
。我需要获得 integration_test.
的位置许可
我在 windows 环境变量中设置了 ANDROID_SDK_ROOT
。我已经从命令提示符和 Android Studio 终端进行了测试,两者都显示正常。 https://i.ibb.co/4gDPs3Z/echo-android-sdk-root.jpg
不幸的是,我从 Platform.environment
得到 ANDROID_SDK_ROOT
值 null
。我附上了屏幕截图 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
- 你只需要这样做一次,之后 运行 直接从测试资源管理器进行的测试将不会显示 pop
- 要再次显示对话框,请在终端中使用以下命令撤销权限
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()
也不行。
我正在尝试为我的位置应用编写 integration_test
。我需要获得 integration_test.
我在 windows 环境变量中设置了 ANDROID_SDK_ROOT
。我已经从命令提示符和 Android Studio 终端进行了测试,两者都显示正常。 https://i.ibb.co/4gDPs3Z/echo-android-sdk-root.jpg
不幸的是,我从 Platform.environment
得到 ANDROID_SDK_ROOT
值 null
。我附上了屏幕截图 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
- 你只需要这样做一次,之后 运行 直接从测试资源管理器进行的测试将不会显示 pop
- 要再次显示对话框,请在终端中使用以下命令撤销权限
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()
也不行。