当前位置:   article > 正文

【python+appium】使用appium 操作安卓模拟器_appium连接模拟器

appium连接模拟器

我的基本环境:
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
  • 1
  • 2

androidsdk
配置一个系统变量,指向安装目录即可
在这里插入图片描述
写入环境变量

%ANDROID_HOME%
%ANDROID_HOME%\tools
%ANDROID_HOME%\build-tools\29.0.3
  • 1
  • 2
  • 3

在这里插入图片描述

配置模拟器

打开创建好的夜神模拟器
我为了方便好看,将平板模式转成了手机模式,只是显示方式改变了而已内容不影响
在这里插入图片描述
打开设置 --> 系统 --> 关于平板 找到版本号 狂点,直至进入开发者模式
在这里插入图片描述
成功进入后,找到开发者选项
在这里插入图片描述
打开USB调试
在这里插入图片描述
在本机打开cmd 查看是否可以连接
adb devices
在这里插入图片描述如果列表显示为空,则说明adb未连接模拟器
adb connect 127.0.0.1:<模拟器端口号>
模拟器端口号查询:

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

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

在这里插入图片描述
用记事本打开vbox文件即可,查找 guestport="5555" 所在行
在这里插入图片描述
在这里插入图片描述
找到其对应的端口号,并记录即可。

adb connect 127.0.0.1:62001
adb devices
  • 1
  • 2

在这里插入图片描述

简单打开指定app

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

pip install selenium==4.9.0
pip install appium-python-client==2.9.0
  • 1
  • 2

这个版本我已经测试过了,可以用
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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

版本号就在模拟器设置中 “关于平板”(其实你新建模拟器的时候就已经指定版本了,跟着自己的版本来就好)
在这里插入图片描述
设备名称,在终端运行 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…
  • 1
  • 2
  • 3

解决方案:

参考 :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,运行又成功了,如果有知道原因的大神,欢迎分享一下。

  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更新到合适的版本了
    在这里插入图片描述
    但是运行结果异常了,查找后发现是版本的问题,将版本后就正常运行了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/957873
推荐阅读
相关标签
  

闽ICP备14008679号