版权声明:本文为CSDN博主「桂圆干龙眼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42617600/article/details/114111785 (超级加倍声明!!!)
【根据原文有删减&修改】
前言
- 电脑系统:win11&x64
- 手机:安卓(ios需要用xcode ps:macbook)
- 需要的工具可以在这里下载,https://pan.baidu.com/s/1MupElpYcmeQH3uPQ1CUWjw 提取码:AJDG
安装
- python 3.9.11
- jdk 17.0.8
- 编辑器PyCharm 2023.3.1
- Appium-windows-x.x 1.15.1
- Appium_Python_Client 3.1.1
- Android SDK
安装,迈开腿的第一步
python(它可以用于桌面应用,游戏开发,机器学习, 数据分析, 网络爬虫…)
勾选Add Python x.x to PATH(没有勾选的安装成功后可手动在环境变量里配置)
Install Now
安装中…
安装成功
验证是否成功,终端输入‘python’,出现以下内容就成功了
jdk(Java 语言的软件开发工具包)
appium server好像只支持1.8的jdk,so有时候太优秀不一定能被认可(狗头保命)
下一步…
下一步…
wait wait …
安装成功,需要在环境变量里配置一下
新建一个’JAVA_HOME’
把‘JAVA_HOME’添加到path里,注意是添加不是替换,后果不堪设想
确定确定确定,打开cmd运行测试一下是否安装成功,输入‘java -version’,成功
编辑器PyCharm(敲代码的)
Appium-windows-x.x(运行脚本需要,可查看运行日志,可以获取app页面元素)
Appium_Python_Client(调用客户端库和 Appium Server 进行通信)
Android SDK(手机baiandroid系统的开发发包,用来执行命令设置手机、传送文件、安装应用、查看手机界面等)
这几个就劳驾去原文章看教程吧 不搬了太累了
连接手机
敲黑板,重点来了,做app自动化肯定要用到手机噻,拿usb连接电脑(chā它!!- 原作者写的 我觉得他有点🔥)
(1) 拿出你的手机-----打开手机设置------找到关于手机-------一直点击版本号直到出现提示
(2) 打开手机的开发者选项,该开的开,该关的关,特别是USB调试这里一定要打开
还有USB设置需要改一下,暂时只发现这两个比较重要,有兴趣的可以研究一下开发人员选项
(3) 测试是否连接成功,在终端输入‘adb devices -l’,查看连接的设备,如果列表为空,检查一下是不是有以上原因(1)(2)
累了 先不抄了 未完待续…
问题记录:
- 文章中原作者使用的 Appium-python-client 是1.x版本的和现在最新的3.x版本的初始化部分存在gap
# 导入webdriver
from appium import webdriver
from appium.options.android import UiAutomator2Options
# 初始化参数
appium_options = UiAutomator2Options()
appium_options.app_activity = 'xxxxx'
appium_options.app_package = 'com.xxxxx'
appium_options.platform_name = 'android'
appium_options.device_name = "xx"
appium_options.no_reset = True
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',
options=appium_options)
driver.implicitly_wait(5)
- 调试过程中发现所使用的oppo-findX3 型号的测试机 在被appium调起时会报错 (在时间紧任务重的背景下 果断换了一部测试机 就可以正常使用)
An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command 'D:\\android-sdk\\platform-tools\\adb.exe -P 5037 -s 3e91e5e5 shell settings delete global hidden_api_policy_pre_p_apps' exited with code 255'; Stderr: 'Exception occurred while executing 'delete':
java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
at com.android.providers.settings.SettingsProvider.enforceWritePermission(SettingsProvider.java:2561)
at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1562)
at com.android.providers.settings.SettingsProvider.mutateGlobalSetting(SettingsProvider.java:1554)
at com.android.providers.settings.SettingsProvider.deleteGlobalSetting(SettingsProvider.java:1525)
at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:568)
at android.content.ContentProvider.call(ContentProvider.java:2548)
at android.content.ContentProvider$Transport.call(ContentProvider.java:538)
at com.android.providers.settings.SettingsService$MyShellCommand.deleteForUser(SettingsService.java:410)
at com.android.providers.settings.SettingsService$MyShellCommand.onCommand(SettingsService.java:284)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.providers.settings.SettingsService.onShellCommand(SettingsService.java:51)
at android.os.Binder.shellCommand(Binder.java:1073)
at android.os.Binder.onTransact(Binder.java:901)
at android.os.Binder.execTransactInternal(Binder.java:1331)
at android.os.Binder.execTransact(Binder.java:1268)'; Code: '255'
附上 小豆包的回答(尝试了1&2 后面俩不懂|懒得搞,反正有奇奇怪怪的问题感觉可以换设备试试):
豆包:
根据错误信息,问题出在没有权限来执行 settings delete global hidden_api_policy_pre_p_apps ADB 命令。该命令尝试删除全局隐藏的 API 策略,但由于缺少android.permission.WRITE_SECURE_SETTINGS权限而被拒绝。
要解决此问题,你可以尝试以下步骤:
1.确保你的应用程序在 Manifest 文件中请求了android.permission.WRITE_SECURE_SETTINGS权限。你可以在Manifest 文件的<manifest>标签内部添加以下权限声明:
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
2.如果你的应用程序已经请求了该权限,请检查是否在运行时获得了用户的授权。在某些设备上,用户可能需要在设置中手动授予此权限。
3.如果你是以管理员身份或具有足够权限的用户身份运行 ADB 命令,请确保你的 ADB 命令行具有足够的权限来执行此操作。你可能需要使用 root 权限或在设备上启用相应的开发者选项。
4.如果以上方法都不奏效,可能是由于设备的安全设置或系统限制导致的。在某些情况下,无法直接通过 ADB 命令删除全局隐藏的 API 策略。
请注意,修改系统设置和权限可能会对设备的安全性和稳定性产生影响。在进行任何更改之前,请仔细考虑并了解可能的风险。如果你遇到其他问题或需要更多帮助,请提供更多的上下文和详细信息。