Appium 用途和特点;
Appium
是一个移动 App (手机应用)自动化工具。比如微信客服机器人,而且有的系统没有网页,也不方便通过HTTP爬取。
要模拟用户点击界面按钮,Appium 自动化系统的流程是这样的:
-
自动化程序 调用客户端库相应的函数, 发送
点击元素
的指令(封装在HTTP消息里)给 Appium Server -
Appium Server 再转发这个指令给 手机上的自动化代理
-
手机上的自动化代理 接收到 指令后,调用手机平台的自动化库,执行点击操作,返回点击成功的结果给 Appium Server
-
Appium Server 转发给 自动化程序
-
自动化程序了解到本操作成功后,继续后面的自动化流程
自动化代理控制,使用的框架:
如果测试的是苹果手机, 用的是苹果的 XCUITest 框架 (IOS9.3版本以后)
如果测试的是安卓手机,用的是安卓的 UIAutomator 框架 (Android4.2以后)
自动化环境搭建:
安装client编程库:自动化程序需要调用客户端库和 Appium Server 进行通信。
pip install appium-python-client
安装Appium Server:Appium Server 是用 nodejs 运行的,基于js开发出来的。存在一个可执行程序 Appium Desktop,把 nodejs 运行环境、Appium Server 和一些工具 打包在里面了,只需要简单的下载安装就可以了。
安装JDK:安装好jdk之后,并配置jdk环境,就能安装安卓SDK。
安装 Android SDK(adb):对于安卓APP的自动化,Appium Server 是需要 Android SDK的。推荐配置环境变量 PATH ,加入 adb所在目录。
连接手机:
要自动化手机APP,需要:
-
在你运行程序的电脑上 用 USB线 连接上 你的安卓手机
-
进入
手机设置
->关于手机
,不断点击版本号
菜单(7次以上), -
退出到最上级菜单,打开其它设置,拉到底,在开发者模式中,启动USB调试
连接好以后,打开命令行窗口, 执行 adb devices -l
命令来列出连接在电脑上的安卓设备。
一个例子:
代码就不写了,特别注意手机上版本的问题!!!
总结找的一些问题:
Original error: Error executing adbExec.
Original error: 'Command 'D:\\work_soft\\android-sdk-windows\\platform-tools\\adb.exe -P 5037 -s NRIZMJRCWODMTWCA shell settings delete global hidden_api_policy_pre_p_apps' exited with code 255'; Stderr: 'Exception occurred while executing 'delete'。
我把这个问题导入ai回答,ai说是:权限不足的问题,但是我的环境变量是设置的系统变量,不应该会出现这样的问题。
ai给出的回答:权限不足(pass)、安卓版本号过高、设备未正常连接(能通过adb devices -l就没问题)、设备厂商问题。(都不是这些原因!!!)
此错误表示ADB命令 settings delete global hidden_api_policy_pre_p_apps 执行失败,退出码 255,常见原因如下:
权限不足
Android 14 进一步限制 WRITE_SECURE_SETTINGS 权限,普通ADB会话无法直接修改系统安全设置(即使开发者模式已开启)。
目标键值已废弃
hidden_api_policy_pre_p_apps 在 Android 14 中可能已被移除或重命名,导致命令无法找到该配置项。
设备厂商限制
部分厂商(如华为、小米、三星)在 Android 14 中彻底禁用通过ADB修改安全设置的功能。
ADB连接或环境问题
设备未正确连接、ADB版本过旧或系统分区不可写。
然后从网上找解决办法:
1.检查你的sdk的版本一定要兼容你的手机型号(也不是这个问题,这个东西差点让我删掉了sdk,一度让我觉得是不是jdk或者哪一个问题错了。但因为有装过很多软件的经验,就没轻易删除软件)
真正的解决方式:
【Appium踩坑】settings delete global hidden_api_policy_pre_p_apps‘ exited with code 255‘-CSDN博客
然后继续找博客,找到这一篇回答。其实问题就是,我的手机是一加手机,一加手机必须在开发者选项里打开“禁止权限监控”。
这个东西就是导致我们连接真机的时候,手机不能安装“appuim settings”的罪魁祸首!!!