九零不老心
发布于 2019-09-30 / 12 阅读 / 0 评论 / 0 点赞

python使用appium自动化操作android设备app

# 功能目的:
    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,然后搜索关键字"<manifest",找其中包含的"package=";
                搜索关键字"<activity"找其中包含"MainActivity"
                得到"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":"1440x810","deviceModel":"MI 6 Plus","deviceManufacturer":"Xiaomi"}}
        [HTTP] <-- POST /wd/hub/session 200 7611 ms - 761