python+appium+雷电模拟器安卓自动化及踩坑

一、环境安装

环境:window11

1.1 安装Android SDK

AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载

这里面任选一个就可以,最终下载完主要要安装操作安卓的工具adb,安装这个步骤的前提是要安装jdk8,其他版本我试了不行,就使用jdk8即可,jdk8的安装不赘述:

通过sdk manager安装最新的安卓依赖

最终保证相关依赖正常安装,并配置环境变量:

ANDROID_HOME=D:\software\android-sdk-windows变量及值(SDK的安装目录)

把platform-tools及tools添加到系统环境变量,变量值(路径)之间使用分号隔开,两个变量值分别为:%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

1.2 安装appium:

https://github.com/appium/appium-desktop/releases

直接安装最新的appium的desktop版本,这个直接安装即可:

1.3 安装雷电模拟器:

直接安装最新的雷电模拟器即可,但此处需要把adb.exe替换雷电模拟器下的adb.exe,可以先把雷电模拟器下的重命名:

1.4 python3环境appium依赖

直接安装pip install appium-python-client 这个一般是最新版本的appium:

也可以指定低版本的appium

pip install appium-python-client==2.0,这里面坑来了,这个之后再补充,不同版本的appium使用不一样

二、启动环境:

2.1 启动雷电模拟器后:

查看是否可以正常连接

2.2 启动appium

安装完成后直接start即可,但这里面有个坑,也就是到时候运行python时会有,里面包含这种错误,这个就需要启动appium时以管理员身份启动,来解决这个问题,当然前提是配置了安卓的环境变量:

复制代码
An unknown server-side error occurred while processing the command. Original error: Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported

三、python代码调用目标包

3.1 低版本启动方式

也就是appium-python-client==2.0版本,如果你装的是最新版本而使用下面的调用方式,就会报 AttributeError: 'NoneType' object has no attribute 'to_capabilities' 这种错误,也就是调用方式存在问题:

复制代码
from appium import webdriver
desired_caps = {
  "platformName": "Android",
  "platformVersion": "10",
  "deviceName": "Q5X7N19605002672",
  "appPackage": "tv.danmaku.bili",
  "appActivity": ".MainActivityV2",
  "unicodeKeyboard": True,
  "resetKeyboard":True,
  'noReset': True,
  "appium:newCommandTimeout": 6000,
  "appium:automationName": "UiAutomator2"
}
 
if desired_caps is not None:
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
else:
    raise ValueError("desired_caps must not be None")
3.2 最新版本调用方式:

如果你使用的是appium-python-client==4.0版本以上

复制代码
from appium import webdriver
from appium.options.android import UiAutomator2Options

# Appium Desired Capabilities
desired_caps = {
    "platformName": "Android",
    "platformVersion": "10",
    "deviceName": "emulator-5554",
    "appPackage": "com.android.contacts",
    "appActivity": ".activities.PeopleActivity",
    "unicodeKeyboard": True,
    "resetKeyboard": True,
    'noReset': True,
    "appium:newCommandTimeout": 6000,
    "appium:automationName": "UiAutomator2"
}

if desired_caps is not None:
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',
                              options=UiAutomator2Options().load_capabilities(desired_caps))
else:
    raise ValueError("desired_caps must not be None")

运行则会直接打开对应的服务,当然这里面还有个坑,运行报:

Unable to find an active device or emulator with OS 10. The following are available: emulator-5554 (9)

这个其实是参数使用的os版本设置不对"platformVersion": "9",只需要改这段代码即可,到此可以正常运行:

3.3 更改查看apk包命令

通过下面命令查看当前运行的服务包,替换代码中的实际包即可,到此环境整体流程结束:

adb shell dumpsys activity | findstr "mResume"

adb shell dumpsys activity | findstr "mFocus"

相关推荐
Urbano35 分钟前
服装厂入局自动化开袋设备:市场前景、机型选型与落地实效科普
运维·自动化
CodexDave37 分钟前
Python 自动化接单实战(九):Windows 免环境交付如何打包与诊断
windows·python·自动化·python自动化·pyinstaller·软件交付·windows打包
tju233339 分钟前
Gitee Test是什么:从测试资产管理到自动化执行的工程化实践
运维·gitee·自动化
薛定e的猫咪1 小时前
零基础选型指南:Make / 扣子 Coze/n8n/Dify 四大自动化平台完整对比
运维·自动化
WA内核拾荒者12 小时前
WhatsApp 账号异常检测的自动化告警系统设计
数据库·python·自动化
FORCECON115 小时前
力控SCADA驱动 :告别传统寻址,EIP协议全新适配升级
自动化·驱动·scada·监控组态软件·采集监控平台
attitude.x17 小时前
Cursor+GitOps:自动化运维新姿势
运维·自动化
CIO_Alliance1 天前
AI+iPaaS解决方案:跨系统业务流程自动化助力企业AI化转型
运维·人工智能·自动化
CodexDave1 天前
Python 自动化接单实战(一):把 CSV 需求做成配置驱动解析器
java·python·自动化·json·数据清洗·python自动化·csv处理
IT小白杨1 天前
指纹浏览器安全架构技术评测与API自动化能力对比
经验分享·安全·自动化·业界资讯·安全架构·指纹浏览器