本教程讲解如何使用Appium进行手机应用的自动化。 学习本课程前,强烈推荐先学习 Selenium Web 自动化课程 Appium 用途和特点
手机APP 自动化有什么用?
自动化原理我们先来看一下Appium自动化的原理图 这图是不是很眼熟? 对啦,和Selenium 原理图很像。因为 Appium自动化架构就是借鉴的Selenium。 大家看看这幅图, 包含了 3个主体部分 : 自动化程序、Appium Server、移动设备
Appium Server 是 Appium 组织开发的程序,它负责管理手机自动化环境,并且转发 自动化程序的控制指令 给 手机,并且转发 手机给 自动化程序的响应消息。
比如:要模拟用户点击界面按钮,Appium 自动化系统的流程是这样的:
其中,自动化代理控制,使用的什么库来实现自动化的呢? 如果测试的是苹果手机, 用的是苹果的 XCUITest 框架 (IOS9.3版本以后) 如果测试的是安卓手机,用的是安卓的 UIAutomator 框架 (Android4.2以后) 这些自动化框架提供了在手机设备上运行的库,可以让程序调用这些库,像人一样自动化操控设备和APP,比如:点击、滑动,模拟各种按键消息等。 自动化环境搭建本教程主要讲解 安卓APP的自动化。 环境搭建需要下载安装不少软件,而且还有不少是国外网站下载的。 为了方便各位朋友,白月黑羽把这些软件 最新的安装包 都放在如下的百度网盘链接中了,请大家自行下载。 链接:https://pan.baidu.com/s/19C9fGmoXne8DgfXhrTB2TQ 安装client编程库根据原理图, 我们知道自动化程序需要调用客户端库和 Appium Server 进行通信。 因为我们介绍Python语言开发,所以当然是用pip安装,如下 pip install appium-python-client 安装Appium ServerAppium Server 是用 nodejs 运行的,基于js开发出来的。 Appium组织为了方便大家安装使用,制作了一个可执行程序 Appium Desktop,把 nodejs 运行环境、Appium Server 和一些工具 打包在里面了,只需要简单的下载安装就可以了。 可以从 上面给出的百度网盘连接 下载安装: 附加信息: Appium Desktop官方下载,点击这里打开下载页面 安装JDK本教程主要讲解 安卓APP的自动化,必须要安装安卓SDK(后面会讲到),而安卓SDK需要 JDK 环境。 可以从 上面给出的百度网盘连接 下载安装: 安装好之后,还需要添加一个环境变量 JAVA_HOME d:\tools\java\jdk1.8.0_211 具体操作参考视频讲解。 安装 Android SDK对于安卓APP的自动化,Appium Server 是需要 Android SDK的。 因为要用到里面的一些工具,比如 要执行命令设置手机、传送文件、安装应用、查看手机界面等。 可以从 上面给出的百度网盘连接 下载最新的 Android SDK文件包: 解压完成后,需要 配置一下 添加一个 环境变量 另外,还推荐大家配置环境变量 PATH ,加入 adb所在目录, 注意:是 连接手机上述的软件环境都准备好以后,要自动化手机APP,需要:
如果手机连接USB线后,手机界面弹出 类似 如下提示。 选择 允许USB调试。 注意: 有的手机系统,可能需要一些额外的选项需要设置好。 比如,有的手机,开发者选项里 需要打开 总之,给USB开发调试 尽可能方便的控制手机。 连接好以后,打开命令行窗口, 执行 如果输出 类似如下的内容: List of devices attached 4d0035dc767a50bb device product:t03gxx model:GT_N7100 device:t03g 表示电脑上可以查看到 连接的设备,就可以运行自动化程序了。 一个例子下面是一段使用 Appium 自动化的打开 B站 应用,搜索 from appium import webdriver from appium.webdriver.extensions.android.nativekey import AndroidKey desired_caps = { 'platformName': 'Android', # 被测手机是安卓 'platformVersion': '8', # 手机安卓版本 'deviceName': 'xxx', # 设备名,安卓手机可以随意填写 'appPackage': 'tv.danmaku.bili', # 启动APP Package名称 'appActivity': '.ui.splash.SplashActivity', # 启动Activity名称 'unicodeKeyboard': True, # 使用自带输入法,输入中文时填True 'resetKeyboard': True, # 执行完程序恢复原来输入法 'noReset': True, # 不要重置App 'newCommandTimeout': 6000, 'automationName' : 'UiAutomator2' # 'app': r'd:\apk\bili.apk', } # 连接Appium Server,初始化自动化环境 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 设置缺省等待时间 driver.implicitly_wait(5) # 如果有`青少年保护`界面,点击`我知道了` iknow = driver.find_elements_by_id("text3") if iknow: iknow.click() # 根据id定位搜索位置框,点击 driver.find_element_by_id("expand_search").click() # 根据id定位搜索输入框,点击 sbox = driver.find_element_by_id('search_src_text') sbox.send_keys('白月黑羽') # 输入回车键,确定搜索 driver.press_keycode(AndroidKey.ENTER) # 选择(定位)所有视频标题 eles = driver.find_elements_by_id("title") for ele in eles: # 打印标题 print(ele.text) input('**** Press to quit..') driver.quit() 运行代码前,要先 上面的代码只是抓取一页视频标题,要自动化滚动抓取所有的视频标题,
查找 应用 Package 和 Activity没有apk如果你应用已经安装在手机上了,可以直接打开手机上该应用,进入到你要操作的界面 然后执行 adb shell dumpsys activity recents | find "intent={" 会显示如下,最近的 几个 activity 信息, intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=tv.danmaku.bili/.ui.splash.SplashActivity} 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/.ui.splash.SplashActivity 应用的package名称就是 应用的启动Activity就是 有apk如果你已经获取到了 apk,在命令行窗口执行 d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "package: name=" 输出信息中,就有应用的package名称 package: name='tv.danmaku.bili' versionCode='5531000' versionName='5.53.1' platformBuildVersionName='5.53.1' compileSdkVersion='28' compileSdkVersionCodename='9' 在命令行窗口执行 d:\tools\androidsdk\build-tools\29.0.3\aapt.exe dump badging d:\tools\apk\bili.apk | find "launchable-activity" 输出信息中,就有应用的启动Activity launchable-activity: name='tv.danmaku.bili.ui.splash.SplashActivity' label='' icon='' 自学我们的教程时,应该找个同桌 一起学习,互相交流督促。 |
|