作者:后浪v
零、写在前面
偷懒一个月没有更新博客了,偶尔打开CSDN看到仍有许多点赞和关注消息,唔~
来个冠冕堂皇的理由——最近听音乐去了!
( ˃̶̤́ ꒳ ˂̶̤̀ )
一首让人激动且平静的歌,分享出来~
♪ 点击播放
一、Appium的基本原理与安装
1. 相关链接
2. 简介
Appium 是一个移动跨平台移动端自动化测试工具,可以非常便捷的为IOS和Android平台创建自动化测试用例。它可以模拟APP内部的各种操作,如点击、滑动、文本输入等等,只要我们手动操作Appium就可以完成。另外,Appium实际上继承了Selenium,Appium也是利用WebDriver来实现App的自动化测试的。
Appium相当于一个MITM,我们将编程语言(例如PYTHON)传给Appium,Appium就会根据不同的操作指令对移动设备进行驱动,完成不同的动作,例如:
- 自动化完成一些重复性的任务
- 爬虫
- 自动化测试
3. 工作原理
这幅图, 包含了 3个主体部分 : 自动化程序、Appium Server、移动设备
- 自动化程序:自动化程序是由我们来开发的,实现具体的手机自动化功能。
- Appium Server:负责管理手机自动化环境,并且转发自动化程序的控制指令给手机,转发手机给自动化程序的响应消息。
- 手机设备:Appium Server 会在手机上 安装一个 自动化代理程序, 代理程序会等待自动化指令,并且执行自动化指令。
4. 所需安装包
接下来的演示均以Python语言为例,不足之处请多多指出。
请确保PC已经搭建好Python环境和安装编辑器,另外需要安装Appium、JDK和下载好Android SDK。
因为软件较多且多布置在国外网站,这里我整理在百度网盘以供大家使用:
点击跳转到网盘链接
提取码:u0na
你点击链接的样子是不是像极了给我博客点赞时帅气的样子呢?不要下次一定了叭~~
5. 自动化环境搭建
5.1 Appium Server安装
Appium Desktop官方下载 点击跳转
Appium组织为了方便大家安装使用,制作了一个可执行程序 Appium Desktop,把 nodejs 运行环境、Appium Server 和一些工具打包在里面了,只需要简单的下载安装就可以了。
5.2 安装client编程库
根据原理图,我们知道自动化程序需要调用客户端库和Appium Server进行通信。
因为我们介绍Python语言开发,所以就需要用pip安装库,如下:
5.3 安装JDK
安卓APP的自动化,必须要安装安卓SDK,而安卓SDK需要JDK环境。网盘下载: jdk-8u211-windows-x64.exe
安装好之后,还需要添加一个环境变量 JAVA_HOME,指定值为jdk安装目录,比如:
5.4 安装 Android SDK
对于安卓APP的自动化,Appium Server 是需要 Android SDK的。
因为要用到里面的一些工具,比如 要执行命令设置手机、传送文件、安装应用、查看手机界面等。
可以从上面给出的百度网盘连接下载最新的 Android SDK文件包: androidsdk.zip ,并且解压,即可。
解压完成后,需要 配置一下添加一个环境变量ANDROID_HOME,设置值为sdk包解压目录,比如:
另外,还推荐大家配置环境变量PATH,加入adb所在目录:
6. 连接手机
连接好以后,打开命令行窗口, 执行
命令来列出连接在电脑上的安卓设备。
如果输出类似如下的内容:
List of devices attached
4d0035dc767a50bb evice product:LCT_LA100 xxx:HUAWEI
device:01
表示电脑上可以查看到 连接的设备,就可以运行自动化程序了。
7. 区分用户变量和系统变量(补充)
首先来解释一下什么是环境变量path。
环境变量 Path 中包含的 这些目录, 就是 Windows查找程序的目录。
环境变量 Path 的内容包括了多个目录,目录之间用分号隔开。
当我们在CMD中敲入下面的命令时:
python Appium_Bilibili.py
Windows 命令执行器 就会依次搜索如下目录:
- C:Python38Scripts;
- C:Python38;
- C:%USERPROFILE%AppDataLocalMicrosoftWindowsApps;
- C:Program Files (x86)mitmproxybin;
- C:Windowssystem32;
- C:Users ingyAppDataLocalProgramsMicrosoft VS Codebin;
- C:WindowsSystem32Wbem;
- C:WindowsSystem32WindowsPowerShellv1.0
看这些目录中,是否有 python.exe 或者 python.bat 之类的可执行文件,如果有就执行他们。
区别(引用博客):
- 系统变量:对所有的用户起作用
- 用户变量:对当前用户起作用
注意:系统变量与用户变量的PATH:告诉系统可执行文件放在什么路径(平常执行程序的路径,要放在PATH里面,不能建一个变量,cmd会提示“不是内部或外部命令,或者不是可执行程序”)
二、代码展示与分析
前面说过,Appium继承了Selenium的WebDriver类,实际上代码可以参考selenium网页自动化。
Say Is Easy. Show Thou Code!
运行代码前,要先 运行Appium Desktop
首先,封装了desired_caps字典,传入了手机信息,被测试软件信息,输入法信息,自动化服务的相关信息。
查询启动APP Package与启动Activity名称的方法:
手机成功连接电脑后,打开被测试的手机APP,然后通过ADB(Android Debugger Bridge) 命令查看手机最近运行程序:
我们来着重关注cmp参数:
其中cmp中“/”前半段就是APP Package名称,后半段就是Activity名称。
如下所示:
主要来说说实例化这一行。
此行代码调用了webdriver的Remote方法,Appium Server启动后会在本地创建一个默认端口号: 127.0.0.1:4723,这里加入了这个参数,并且传入了之前配置好的desired_caps字典。
remote 英[rɪˈməʊt] 美[rɪˈmoʊt]
adj.偏远的; 偏僻的; 遥远的; 久远的; 关系较远的; 远亲的;
n. 远程;
[例句]Landslides have cut off many villages in remote areas.
滑坡使边远地区的许多村庄与外界隔绝。
[其他]比较级:remoter 最高级:remotest
很难直观的看出Romote()方法的功能,那么的,一起来看看源代码:
第19行
这就明白了,Remote实际上就是WebDriver类。
接下来我们看看WebDriver类。
可以看到,WebDriver把desired_caps传入了一个个的方法去执行。所以,这里的Romote()方法做了很多事情:
- 识别一个Android且版本为10的手机设备并连接
- 找到被测试的App对象并通过Lancher启动它
- 配置好适合的输入法
- 配置好UIAutomator
到这里,初始化就完成了。
三、元素定位与界面操作
Appium是基于Selenium的,所以和Selenium代码定位元素的基本规则相同。
1. 界面元素查看工具
- Android Sdk包中的 uiautomateviewer
- Appium Desktop 中的 Appium Inspector
2. 定位元素的方法
2.1 根据ID
对于安卓应用元素的 resource-id 属性
2.2 根据CLASS NAME
对应安卓应用元素的类型
2.3 根据ACCESSIBILITY ID
元素的 content-desc 属性是用来描述该元素的作用的
2.4 根据Xpath
表达式的语法规则和 Selenium 里面 Xpath 的语法是一样的
在appium中,xpath表达式中每个节点名是元素的 class 属性值
3. 安卓 UIAutomator
谷歌安卓官方文档
4. 界面操作
-
driver.click() # 点击
-
driver.tap([(850,1080)],300) # 点按
-
driver.send_keys(string) # 输入
-
driver.swipe(start_x=x, start_y=y1, end_x=x, end_y=y2, duration=800) # 滑动