Android自动化实现

基于Appium框架实现手机app RPA

参考资料

一、基础环境搭建

关于相关软件的 百度网盘:https://pan.baidu.com/s/1uZBxE6e1RoBdQQDVOIrnqA?pwd=yang

  1. 安装client编程库

    pip install appium-python-client
    
  2. 安装Appium Server

    下载百度网盘连接中的:Appium-windows-1.15.1.exe

  3. 安装JDK

    百度网盘链接:https://pan.baidu.com/s/1MEqywawXQ_tYf6k8h9by3A?pwd=yang

    推荐使用jdk 1.8 版本,使用jdk 11.0可能会报错

    JDK安装完成后需要配置环境变量 如:JAVA_HOME d:\tools\java\jdk1.8.0_211

  4. 安装Android SDK

    下载第一个百度网盘链接中的:androidsdk.zip

    下载并解压完成后,添加系统环境变量 ANDROID_HOME 值为 d:\tools\androidsdk

    此外,将adb.exe所在目录加入PATH系统环境变量 d:\tools\androidsdk\platform-tools\

二、连接手机

  1. 在你运行程序的电脑上 用 USB线 连接上 你的安卓手机
  2. 进入 手机设置 -> 关于手机 ,不断点击 版本号 菜单(7次以上)
  3. 退出到上级菜单,在开发者模式中,启动USB调试(不同的手机有不同的设置需求,可以自行百度,如OPPO手机需( 将选择USB配置设置为MIDI);开启 禁止权限监控

三、命令

  1. 查看是否成功连接手机

    adb devices -l
    -------#若出现一下结果则链接成功#------------
    List of devices attached
    f5865013               device product:PDPM00 model:PDPM00 device:OP4A47 transport_id:5
    
  2. 查看从软件商城安装的(无apk安装包)的app的appPackageappActivity参数命令

    需要现在手机上启动程序,让程序页面处于最上层

    adb shell dumpsys activity recents | find "intent={"
    
    -------#输出结果的第一行则是该app的相关数据#------------
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=tv.danmaku.bili/.MainActivityV2}
    intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000300cmp=com.huawei.android.launcher/.unihome.UniHomeLauncher}
    intent={flg=0x10804000 cmp=com.android.systemui/.recents.RecentsActivity bnds=[48,1378][10322746]}
    intent={flg=0x10000000 cmp=com.tencent.mm/.ui.LauncherUI}
    
    #-------------
    cmp=tv.danmaku.bili/.MainActivityV2
    
    appPackage = tv.danmaku.bili
    appActivity = .MainActivityV2
    
  3. 有apk安装包,查看app的appPackageappActivity参数

    • 查看 appPackage 在命令行窗口执行

      d:\tools\apk\bili.apk --> apk文件在电脑中的路径

    d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "package: name="
    
    -------------
    # 输出
    package: name='tv.danmaku.bili' versionCode='5531000' versionName='5.53.1' platformBuildVersionName='5.53.1' compileSdkVersion='28' compileSdkVersionCodename='9'
    
    则 appPackage = tv.danmaku.bili
    
    • 查看 appActivity 在命令行窗口执行
    d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "launchable-activity"
    
    -----------
    # 输出
    launchable-activity: name='tv.danmaku.bili.MainActivityV2'  label='' icon=''
    
    则 appActivity = tv.danmaku.bili.MainActivityV2
    或 appActivity = .MainActivityV2
    

四、测试

  1. 先通过 adb devices -l检测电脑是否成功连接手机

  2. 在手机上启动某个app程序,这里以哔哩哔哩为例

  3. 在电脑命令行窗口输入命令查看启动的手机app的appPackageappActivity参数值

    • 无apk

      adb shell dumpsys activity recents | find "intent={"
      
    • 有apk

      • appPackage参数值
      d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "package: name="
      
      • appActivity参数值
      d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "launchable-activity"
      
  4. 打开安装好的Appium Server程序

    点击编辑配置,按搭建环境是配置的ANDROID_HOMEJAVA_HOME环境变量的值输入即可,并点击保存并重新启动

    image-20230905110649431

    点击启动服务器

  5. 编辑python自动化程序作为客户端

    desired_caps字典中的appPackageappActivity输入通过上面说的方法查询到的值对应输入即可

    from appium import webdriver
    from selenium.webdriver.common.by import By
    
    
    desired_caps = {
        'platformName': 'Android',  # 被测手机-安卓
        'platformVersion': '12',    # Android版本
        'deviceName': 'xxx',        # 设备名称
        'appPackage': 'tv.danmaku.bili',    # 启动APP Package名称
        'appActivity': '.MainActivityV2',  # 启动Activity名称
        # 'unicodeKeyboard': True,    # 使用自带输入法,输入中文是填True,输入中文时需要
        # 'resetKeyboard': True,      # 执行完程序恢复原来的输入法,输入中文时需要
        'noReset': True,            # 不重置App,【重要】
        'newCommandTimeout': 6000,
        'automationName': 'UiAutomator2'
    }
    
    # 连接Appium Server,初始化自动化环境
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_caps)
    
    # 设置缺省等待时间
    driver.implicitly_wait(10)
    
    driver.find_element(By.ID, 'expand_search').click()
    
    driver.find_element(By.ID, 'search_src_text').send_keys('yuanshen')
    
    driver.find_element(By.ID, 'action_search').click()
    
    eles = driver.find_elements(By.ID, 'title')
    
    for ele in eles:
        # 打印标题
        print(ele.text)
    
    input('**** Press to quit..')
    # 根据id定位搜索框位置
    driver.quit()
    

    在启动程序后,手机会自动安装Appium Settings程序,需要手动通过安装一下,之后就不需要再动手机了

以上为学习白月黑羽大佬文档后的总结,原文链接:https://www.byhy.net/tut/auto/appium/01/

posted @   杨先生ㄨ  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示