# 功能目的:
python使用appium自动化操作android设备app
细节:python使用Appium Python Client模块操作appium server,而appium 是通过android sdk操作android设备的app
# 一、安装android studio,通过studio安装android sdk
https://developer.android.google.cn/studio/
安装android studio,然后通过android studio下载android sdk
记住android sdk的路径C:\Users\George\AppData\Local\Android\Sdk,设置本机环境变量ANDROID_HOME=C:\Users\George\AppData\Local\Android\Sdk
# 二、安装jdk、appium、python以及appium python client模块
appium除了需要android sdk,还需要用到java,所以下载安装jdk,并配置本机环境变量JAVA_HOME=C:\Program Files\java-1.8.0-openjdk-1.8.0.222-4.b10.redhat.windows.x86_64
下载安装appium:http://appium.io
下载安装python及所需模块
# 三、安装mumu模拟器(具体的android设备,其他模拟器也支持)
可以通过usb连接自己的手机(需要开启usb调试模式)
也可以本机安装安卓模拟器(需要开启usb调试模式,我用的mumu,感觉清爽点)
# 四、具体实现
# 获取apk的appPackage和appActivity(重要元素)
# 使用adb shell获取当前app的appPackage和appActivity
打开mumu,打开app,进入主页面
windows里进入C:\Users\George\AppData\Local\Android\Sdk\platform-tools,shift+右键,选择此处打开powershell
使用adb连接mumu模拟器,执行命令:
PS C:\Users\George\AppData\Local\Android\Sdk\platform-tools> .\adb.exe connect 127.0.0.1:7555
* daemon not running; starting now at tcp:5037
* daemon started successfully
connected to 127.0.0.1:7555
执行查询命令:PS C:\Users\George\AppData\Local\Android\Sdk\platform-tools> .\adb.exe shell
root@MI 6 Plus:/ # dumpsys activity | grep mFocusedActivity
mFocusedActivity: ActivityRecord{1ce9a23 u0 com.ss.android.ugc.aweme/.main.MainActivity t15}
此时”appPackage”=”com.ss.android.ugc.aweme”,”appActivity”=”com.ss.android.ugc.aweme.main.MainActivity”
# 使用apktool
# 下载apktool_2.4.0.jar
https://ibotpeaches.github.io/Apktool/
# 利用apktool反编译需要操作的aweme_aweGW_v8.1.0_e487ea0.apk
java -jar .\apktool_2.4.0.jar d .\aweme_aweGW_v8.1.0_e487ea0.apk
会在同级有一个名称为aweme_aweGW_v8.1.0_e487ea0的目录
然后用文本编辑器打开该目录下的AndroidManifest.xml,然后搜索关键字”
搜索关键字”
得到”appPackage”=”com.ss.android.ugc.aweme”,”appActivity”=”com.ss.android.ugc.aweme.main.MainActivity”
# 启动mumu模拟器
打开mumu,同时查看系统版本号
“platformVersion”: “6.0.1”
windows里进入C:\Users\George\AppData\Local\Android\Sdk\platform-tools,shift+右键,选择此处打开powershell
使用adb连接mumu模拟器,执行命令:
PS C:\Users\George\AppData\Local\Android\Sdk\platform-tools> .\adb.exe connect 127.0.0.1:7555
* daemon not running; starting now at tcp:5037
* daemon started successfully
connected to 127.0.0.1:7555
获取设备名称,执行命令(此时”deviceName”:”127.0.0.1:7555″):
PS C:\Users\George\AppData\Local\Android\Sdk\platform-tools> .\adb.exe devices
List of devices attached
127.0.0.1:7555 device
# 启动appium
appium console会有相应的过程输出
# 编写python程序,交互appium
#!/usr/bin/env python
from appium import webdriver
desired_caps = {
“platformName”: “Android”,
“platformVersion”: “6.0.1”,
“deviceName”: “127.0.0.1:7555”,
“appPackage”: “com.ss.android.ugc.aweme”,
“appActivity”: “com.ss.android.ugc.aweme.main.MainActivity”
}
# 连接appium server,告诉appium,代码要操作哪个设备上的哪个APP
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub’, desired_caps)
# 执行上面的python代码,如果appium console最后有以下内容输出,则说明连接正确
[W3C (a7c28ff9)] Responding to client with driver.createSession() result: {“capabilities”:{“platform”:”LINUX”,”webStorageEnabled”:false,”takesScreenshot”:true,”javascriptEnabled”:true,”databaseEnabled”:false,”networkConnectionEnabled”:true,”locationContextEnabled”:false,”warnings”:{},”desired”:{“platformName”:”Android”,”platformVersion”:”6.0.1″,”deviceName”:”127.0.0.1:7555″,”appPackage”:”com.ss.android.ugc.aweme”,”appActivity”:”com.ss.android.ugc.aweme.main.MainActivity”},”platformName”:”Android”,”platformVersion”:”6.0.1″,”deviceName”:”127.0.0.1:7555″,”appPackage”:”com.ss.android.ugc.aweme”,”appActivity”:”com.ss.android.ugc.aweme.main.MainActivity”,”deviceUDID”:”127.0.0.1:7555″,”deviceScreenSize”:”1440×810″,”deviceModel”:”MI 6 Plus”,”deviceManufacturer”:”Xiaomi”}}
[HTTP] <– POST /wd/hub/session 200 7611 ms – 761