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"

相关推荐
兜兜转转了多少年40 分钟前
从脚本到系统:2026 年 AI 代理驱动的 Shell 自动化
运维·人工智能·自动化
L543414463 小时前
告别代码堆砌匠厂架构让你的系统吞吐量翻倍提升
大数据·人工智能·架构·自动化·rpa
码农阿豪4 小时前
多服务器批量指令管理:从Xshell到自动化运维
运维·服务器·自动化
2501_941982055 小时前
别再手动发群消息了!企业微信外部群自动化推送的架构设计与实现
运维·自动化·企业微信
Wpa.wk5 小时前
接口自动化 - 接口鉴权处理常用方法
java·运维·测试工具·自动化·接口自动化
0思必得05 小时前
[Web自动化] Selenium获取元素的子元素
前端·爬虫·selenium·自动化·web自动化
Wpa.wk6 小时前
接口自动化 - 多环境统一文件配置 +多响应统一转换处理
运维·服务器·测试工具·自动化·接口自动化·统一配置
是枚小菜鸡儿吖6 小时前
从 0 到 1 生成自定义算子:CANN + AIGC 的自动化工作流
运维·自动化·aigc
楚轩努力变强6 小时前
iOS 自动化环境配置指南 (Appium + WebDriverAgent)
javascript·学习·macos·ios·appium·自动化
keven-wang7 小时前
104/101协议-电力配电自动化中的遥脉是什么?
自动化·104·五遥·101·遥脉