赞
踩
我的基本环境:
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.com/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.com/p/c21072fc158e)
1. 已知 安卓模拟器的端口号通常是 5555
2. 进入模拟器安装路径,找到创建模拟器产生的文件夹
用记事本打开vbox文件即可,查找 guestport="5555"
所在行
找到其对应的端口号,并记录即可。
adb connect 127.0.0.1:62001
adb devices
在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() 注释掉了)
淘宝正常打开
UnknownError: An unknown server-side error occurred while processing the command. Original error: Could not find a connected Android device.
[ADB] Killing adb server on port 5037
[ADB] Getting connected devices…
[ADB] Could not find devices, restarting adb server…
解决方案:
参考 :https://blog.csdn.net/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,运行又成功了,如果有知道原因的大神,欢迎分享一下。
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再运行就没有问题了。
AttributeError: 'NoneType' object has no attribute 'to_capabilities'
解决方法:版本太高了,换低版本。
原因:
上个问题不是说我的原环境无法安装appium 2.9 版本吗,然后我就把selenium的版本往上抬到了4.21
重新安装 pip install appium-python-client==3.1.1
的时候自动就将selenium更新到合适的版本了
但是运行结果异常了,查找后发现是版本的问题,将版本后就正常运行了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。