admin管理员组

文章数量:1548721

我的基本环境:
node.js 版本:18.20.0
python 版本:3.11
java 版本 1.8.0_40
appium 版本 1.15
python中的appium-python-client 包:版本 – 2.9.0
python中的selenium包:版本 – 4.9.0
adb 原始版本:1.0.41

因为手边没有多余的真机,所以想着尝试用模拟器试一试安卓自动化,踩了不少坑,在此记录一下。
我在这儿用到的模拟器是——夜神模拟器 ,android 9

搭建基本环境

我自用的appium、androidsdk、java包 我放在这儿了
链接:https://pan.baidu/s/1k1EplXVKKACiTIA0GMu3Iw
提取码:ec3g
傻瓜安装即可

配置环境变量

java
配置一个系统变量

写入环境变量 PATH

%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin

androidsdk
配置一个系统变量,指向安装目录即可

写入环境变量

%ANDROID_HOME%
%ANDROID_HOME%\tools
%ANDROID_HOME%\build-tools\29.0.3

配置模拟器

打开创建好的夜神模拟器
我为了方便好看,将平板模式转成了手机模式,只是显示方式改变了而已内容不影响

打开设置 --> 系统 --> 关于平板 找到版本号 狂点,直至进入开发者模式

成功进入后,找到开发者选项

打开USB调试

在本机打开cmd 查看是否可以连接
adb devices
如果列表显示为空,则说明adb未连接模拟器
adb connect 127.0.0.1:<模拟器端口号>
模拟器端口号查询:

(参考文章:https://www.jianshu/p/c21072fc158e)

1. 已知 安卓模拟器的端口号通常是 5555 
2. 进入模拟器安装路径,找到创建模拟器产生的文件夹


用记事本打开vbox文件即可,查找 guestport="5555" 所在行


找到其对应的端口号,并记录即可。

adb connect 127.0.0.1:62001
adb devices

简单打开指定app

在pycharm 中提前安装好需要的依赖库
我这边是在虚拟环境中安装的,版本不要太高,不然会报错(血泪教训啊)

pip install selenium==4.9.0
pip install appium-python-client==2.9.0

这个版本我已经测试过了,可以用
appium-python 要和selenium版本匹配,不匹配的话,之后运行也会报错

基本代码实现:

from appium import webdriver

desired_caps = {
  'platformName': 'Android',  # 被测手机是安卓
  'platformVersion': '9',  # 手机安卓版本
  'deviceName': 'z3****',  # 设备名
  'appPackage': 'tv.danmaku.bili',  # 启动APP Package名称
  'appActivity': '.ui.splash.SplashActivity',  # 启动Activity名称
  'unicodeKeyboard': True,  # 使用自带输入法,输入中文时填True
  'resetKeyboard': True,  # 执行完程序恢复原来输入法
  'noReset': True,  # 不要重置App,如果为False的话,执行完脚本后,app的数据会清空,比如你原本登录了,执行完脚本后就退出登录了
  'newCommandTimeout': 6000,
  'automationName': 'UiAutomator2'
}


# 连接 Appium Server
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)


# 退出程序
driver.quit()

版本号就在模拟器设置中 “关于平板”(其实你新建模拟器的时候就已经指定版本了,跟着自己的版本来就好)

设备名称,在终端运行 adb devices -l

我这里是z3******

查看需要操作的appPackage 和 appActivity
在终端运行 adb shell dumpsys activity recents | find “intent={”
以手机淘宝为例 ,前半部分就是package的内容,后半部分是activity 的内容。
基本环境和代码已经部署完成。

运行

打开appium


直接启动服务器
adb decives 确认模拟器连接状态
启动python脚本 (我为了方便观察,把quit() 注释掉了)

淘宝正常打开

可能会遇到的问题(仅以我目前遇到的问题为例)

  1. UnknownError: An unknown server-side error occurred while processing the command. Original error: Could not find a connected Android device.
    这个错误是说 Appium 无法找到连接的 Android 设备
    然后我在cmd 里再次查看adb连接情况,列表居然为空了,
    我再次连接,再次尝试依旧失败,仔细观察Appium服务器中的日志可以看到,一直在重复打印以下日志
[ADB] Killing adb server on port 5037
[ADB] Getting connected devices…
[ADB] Could not find devices, restarting adb server…

解决方案:

参考 :https://blog.csdn/qq_42470033/article/details/99543597

先将原来androidsdk\platform-tools 下的adb.exe 复制出来;
然后关闭adb服务 adb kill-server

将模拟器中的adb.exe 复制到androidsdk/platform-tools中 替换掉之前的adb.exe
模拟器的adb.exe 在安装目录的bin目录下

再运行即可。
对比两个adb版本,一个是1.0.41 (原来的);一个是1.0.36(模拟器的)
思考可能是版本不兼容导致的。
但是我之后为了测试,又换回原来的41的adb,运行又成功了,如果有知道原因的大神,欢迎分享一下。

  1. InvalidArgumentError: 'platformName' can't be blank; 'deviceName' can't be blank
    解决方案: appium和selenium 版本互相匹配
    原因:
    我原环境的appium 版本是3.1.1的,但是 selenium 版本是4.9 的,无法支持appnium。
    但是我的原环境无法安装2.9版本的,不知道是镜像的问题还是什么。
    后来我再虚拟环境中用appium–2.9.0 selenium==4.9.0再运行就没有问题了。

  2. AttributeError: 'NoneType' object has no attribute 'to_capabilities'
    解决方法:版本太高了,换低版本。
    原因:
    上个问题不是说我的原环境无法安装appium 2.9 版本吗,然后我就把selenium的版本往上抬到了4.21
    重新安装 pip install appium-python-client==3.1.1 的时候自动就将selenium更新到合适的版本了

    但是运行结果异常了,查找后发现是版本的问题,将版本后就正常运行了。

本文标签: 模拟器操作PythonAppium