使用appium运行我的测试脚本时出现SecurityException

问题描述 投票:0回答:5

我在执行 Appium 脚本时遇到安全异常

大家好,我是appium新手,正处于appium工具的学习阶段。我创建了一个脚本来开始基本测试。我收到以下更新错误。

我通过 USB 调试连接了我的设备,设备也在 adb 中列出。但是当我执行它时抛出错误。下面是附加的代码和错误日志。

DesiredCapabilities desire=new DesiredCapabilities();
        desire.setCapability("deviceName", "Redmi");
        desire.setCapability("udid", "3cbaf93d");
        desire.setCapability("platformName", "Android");
        desire.setCapability("platformVersion", "9.0");
        desire.setCapability("appPackage", "com.androi.camera");
        desire.setCapability("appActivity", "com.androi.camera.Camera");
        URL url=new URL("http://127.0.0.1:4723/wd/hub");
        appium=new AppiumDriver<MobileElement>(url,desire);
        System.out.println("app started");
Error log:

Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Unable to create a new remote session. Please check the server log for more details. Original error: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command 'C\:\\Users\\DELL\\AppData\\Local\\Android\\sdk\\platform-tools\\adb.exe -P 5037 -s 3cbaf93d shell settings delete global hidden_api_policy_pre_p_apps' exited with code 255'; Stderr: 'Security exception: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
    at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:1815)
    at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1023)
    at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1006)
    at com.android.providers.settings.SettingsProvider.delete(SettingsProvider.java:592)
    at android.content.ContentProvider$Transport.delete(ContentProvider.java:343)
    at com.android.providers.settings.SettingsService$MyShellCommand.deleteForUser(SettingsService.java:406)
    at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:289)
    at android.os.ShellCommand.exec(ShellCommand.java:103)
    at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:51)
    at android.os.Binder.shellCommand(Binder.java:634)
    at android.os.Binder.onTransact(Binder.java:532)
    at android.os.Binder.execTransact(Binder.java:735)'; Code: '255'
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-S3RV3MH', ip: '192.168.1.5', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_151'
Driver info: driver.version: AppiumDriver
remote stacktrace: UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command 'C\:\\Users\\DELL\\AppData\\Local\\Android\\sdk\\platform-tools\\adb.exe -P 5037 -s 3cbaf93d shell settings delete global hidden_api_policy_pre_p_apps' exited with code 255'; Stderr: 'Security exception: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
    at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:1815)
    at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1023)
    at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1006)
    at com.android.providers.settings.SettingsProvider.delete(SettingsProvider.java:592)
    at android.content.ContentProvider$Transport.delete(ContentProvider.java:343)
    at com.android.providers.settings.SettingsService$MyShellCommand.deleteForUser(SettingsService.java:406)
    at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:289)
    at android.os.ShellCommand.exec(ShellCommand.java:103)
    at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:51)
    at android.os.Binder.shellCommand(Binder.java:634)
    at android.os.Binder.onTransact(Binder.java:532)
    at android.os.Binder.execTransact(Binder.java:735)'; Code: '255'
    at getResponseForW3CError (C:\Users\DELL\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\errors.js:826:9)
    at asyncHandler (C:\Users\DELL\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:447:37)
    at process._tickCallback (internal/process/next_tick.js:68:7)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-S3RV3MH', ip: '192.168.1.5', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_151'
Driver info: driver.version: AppiumDriver
    at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:208)
    at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:217)
    at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:239)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
    at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    at io.appium.java_client.DefaultGenericMobileDriver.<init>(DefaultGenericMobileDriver.java:38)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:84)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:94)
    at test1.Class1.main(Class1.java:27)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:186)
    ... 11 more
Caused by: org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command 'C\:\\Users\\DELL\\AppData\\Local\\Android\\sdk\\platform-tools\\adb.exe -P 5037 -s 3cbaf93d shell settings delete global hidden_api_policy_pre_p_apps' exited with code 255'; Stderr: 'Security exception: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
    at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:1815)
    at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1023)
    at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1006)
    at com.android.providers.settings.SettingsProvider.delete(SettingsProvider.java:592)
    at android.content.ContentProvider$Transport.delete(ContentProvider.java:343)
    at com.android.providers.settings.SettingsService$MyShellCommand.deleteForUser(SettingsService.java:406)
    at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:289)
    at android.os.ShellCommand.exec(ShellCommand.java:103)
    at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:51)
    at android.os.Binder.shellCommand(Binder.java:634)
    at android.os.Binder.onTransact(Binder.java:532)
    at android.os.Binder.execTransact(Binder.java:735)'; Code: '255'
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-S3RV3MH', ip: '192.168.1.5', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_151'
Driver info: driver.version: AppiumDriver
remote stacktrace: UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command 'C\:\\Users\\DELL\\AppData\\Local\\Android\\sdk\\platform-tools\\adb.exe -P 5037 -s 3cbaf93d shell settings delete global hidden_api_policy_pre_p_apps' exited with code 255'; Stderr: 'Security exception: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
    at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:1815)
    at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1023)
    at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1006)
    at com.android.providers.settings.SettingsProvider.delete(SettingsProvider.java:592)
    at android.content.ContentProvider$Transport.delete(ContentProvider.java:343)
    at com.android.providers.settings.SettingsService$MyShellCommand.deleteForUser(SettingsService.java:406)
    at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:289)
    at android.os.ShellCommand.exec(ShellCommand.java:103)
    at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:51)
    at android.os.Binder.shellCommand(Binder.java:634)
    at android.os.Binder.onTransact(Binder.java:532)
    at android.os.Binder.execTransact(Binder.java:735)'; Code: '255'
    at getResponseForW3CError (C:\Users\DELL\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\errors.js:826:9)
    at asyncHandler (C:\Users\DELL\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\protocol\protocol.js:447:37)
    at process._tickCallback (internal/process/next_tick.js:68:7)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
    at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
    at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
    ... 16 more
java android selenium-webdriver appium appium-android
5个回答
10
投票
  1. 转到开发者选项。
  2. 转到最后一个选项 --> 禁用权限监控 --> 启用它。

2
投票
desiredCapabilities.setCapability("ignoreHiddenApiPolicyError" , true) 

会起作用的。


0
投票

嗯,听起来 Appium 需要一些权限才能与应用程序交互。尝试使用

autoGrantPermissions
功能并将其设置为
true
,看看是否有帮助。


[更新]本例中的错误消息不是来自 Appium,而是来自 adb。根据目前的信息,包名称和活动名称可能无效。如果 adb 命令不起作用,那么应用程序 Appium 也将无法工作。

您能否提供您正在遵循的自动化亚马逊购物应用程序的教程,以及为什么问题集更改为使用亚马逊购物应用程序?

我不相信包名称是正确的:

adb shell pm list packages -f | grep mShop

输出

package:/data/app/com.amazon.mShop.android.shopping-6T5__wDlES2DKVGacorMSw==/base.apk=com.amazon.mShop.android.shopping 

0
投票

您确定您使用的是正确的应用程序活动吗,因为如果它不是可启动的活动,那么它也会给您权限异常,请仔细检查可启动的活动名称


0
投票

就我而言,对于类似的问题(从 Appium 连接到手机),解决方案是在开发人员选项中启用“USB 调试(安全设置)”和“USB 安装”。我在那里遇到了另一个问题,因为它(我不知道为什么)需要互联网连接,并且我无法使用我的电信运营商连接来切换这些选项,我必须连接到 wifi。

© www.soinside.com 2019 - 2024. All rights reserved.