appium入门知识
UI自动化相关工具
1、appium平台
2、Apple的UIAutomation
3、Google的UIAutomation
简单的介绍一下这几个工具:
1、Appium简介
Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。
Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。
Appium支持的语言比较多,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言等。
2、Apple的UIAutomation
Apple家的UIAutomation是 Xcode自带的测试框架,在Instruments中可运行,可直接录制脚本和直接运行。
只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。
3、Google的UIAutomation
Google的UIAutomation是谷歌自带的UI自动化测试工具。
只使用Google的UIAutomation,我们就只能用java来编写测试用例。
Appium介绍
Appium 的核心是一个 web 服务器,它提供了一套 REST 的接口。它收到客户端的连接,监听到命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP响应中返还给客户端。
环境搭建
我用了比较简单的脚本Python去完成appium脚本编写,下面就讲一下用Python完成UI自动化,环境搭建如下:
1、安装Appium
2、安装Appium python客户端
其他环境要求
1. IOS
Mac OS X 10.7 or higher, 建议10.9.2
XCode >= 4.6.3, 建议5.1.1
Apple Developer Tools
2. Android
Android SDK API >= 17 (建议18/19)
如何调用Python代码
1、开启appium
打开appium对应的安装路径,比如:C:\Program Files (x86)\Appium\node_modules\.bin
在该路径下,运行:appium 即可启动,appium默认是自动安装APK的
如果需要不安装的话,加个参数即可,启动命令如下:appium --no-reset
2、调用Python脚本
先将路径定位到写好的Python脚本main.py的路径
然后运行命令:
python -m unittest main
Python脚本简介
Desired Capabilities
Desired capabilities 是一些键值对的集合 (比如,一个 map 或者 hash),客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。比如,我们可以把platformName capability 设置为 iOS,告诉 Appium 服务端,我们想要一个iOS 的 session,而不是一个 Android 的。
desired_capabilities.py
编写Python脚本时,需创建2个文件:desired_capabilities.py和main.py
desired_capabilities.py主要是建立get_desired_capabilities()
一、get_desired_capabilities()
获取本次会话的参数。这里主要设置了8个参数。用户可以根据自己的需求进行调整。
1. platformName,我们测试的目标机器。
2. platformVersion,测试目标设备的系统版本。
3. deviceName,测试机器的名称(设备名称即可)。
4. appPackage,被测应用的包名(只有Android测试才用)。
5. appWaitPackage,测试时会等待(只有Android测试才用)。
6. app,被测应用文件的所在位置
7. newCommandTimeout,两条指令的最长时间间隔。如果超过这个间隔,Appium Server将会终止本次会话。
8. automationName,本次会话所使用的自动化引擎。Android 4.2以下系统请使用Selendroid;IOS、Android 4.2以上(含)请使用Appium。
二、main.py
就是UI的功能性脚本。
常用方法整理
1、 查找控件方法
1) ID : 通过resource-id查找。注意,测试Android应用时,Appium引擎和Selendroid引擎的id写法不同,Appium下类似这样:com.alibaba.mts.mtsdemoapp:id/login_login_button;而Selendroid下id是:login_login_button。所以,如果要写通用的脚本,建议使用其他查找方式。
2) XPATH : 通过xpath寻找。例如查找一个包含“Add note”字符串的TextView控件:driver.findElement(By.XPATH, "//android.widget.TextView[contains(@text,'Add note')]")。
3) LINK_TEXT : (不支持Android 4.2.1以下)通过控件的文本文字查找,比如:driver.findElement(By.LINK_TEXT, “登录”),找到控件文字为“登录”控件。注意,它不会匹配“登录吧”、“快登录”等文字。建议使用下面的“PARTIAL_LINK_TEXT”。
4) PARTIAL_LINK_TEXT : (不支持Android 4.2.1以下)类似LINK_TEXT,但是可以匹配“登录吧”、“快登录”等文本的控件。只要包含“登录”即可。
5) TAG_NAME : 通过控件类名查找,比如EditText、Button等等。
6) CLASS_NAME : 通过控件全类名查找,比如android.widget.EditText 、android.widget.Button等
这些控件的属性都可以用uiautomatorviewer这个工具查看,如下图所示:

2、 常用操作
1) 滑动屏幕,比如引导页的滑动
driver.swipe(startx,starty,endx,endy,duration)
开始坐标和结束坐标,duration表示滑动时间,时间越长滑动越慢左右滑动的话,Y坐标不变
2) 点击按钮
Driver.click()
3) 等待
Time.sleep(N)
N是等待的时间,以秒为单位
4) 锁定屏幕
driver.lock(5)
5) 将APP置于后台
driver.background_app(5)
6) 收起键盘
driver.hide_keyboard()
7) 打开通知栏
driver.open_notifications()
8) 检查是否已安装
driver.is_app_installed('com.example.android.apis')
9) 安装应用到设备中
driver.install_app('path/to/my.apk')
10) 从设备中删除应用
driver.remove_app('com.example.android.apis')
11) 模拟设备摇晃
driver.shake()
12) 关闭应用
driver.close_app()
13) 按键事件 (Key Event)
给设备发送一个按键事件
driver.keyevent(176)
14)通过MQC截图检查
可直接在代码中输入MQC自带的截图检查指令。
self.driver.shell("log -p i -t MQC-LOG-MASTER screenshot")
appium入门知识的更多相关文章
- [置顶] Mysql存储过程入门知识
Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...
- 移动H5开发入门知识,CSS的单位汇总与用法
说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...
- H5移动端开发入门知识以及CSS的单位汇总与用法
说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...
- Java web 入门知识 及HTTP协议详解
Java web 入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...
- Java基础入门知识
Java编程入门知识 知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...
- zabbix入门知识
zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...
- React的入门知识与概念【1】
回顾在以往的项目开发中,从最初的使用的原生html+js+css+jquery开发,到后来随着项目功能的增加,也渐渐学习了Vue.js框架的开发,以及Vue.js的全家桶Axios,Vue-route ...
- 我的Python笔记补充:入门知识拾遗
声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...
- 浅谈TCP IP协议栈(一)入门知识【转】
说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...
随机推荐
- linux 安装php扩展swoole redis
本文讲的是已经有redis.so 和swoole.so文件的情况 我的环境是xampp php的扩展目录为 /opt/lampp/lib/php/extensions/no-debug-non-zts ...
- java利用直方图实现图片对比
需求 实现两张图对比,找出其中不同的部分. 分析 首先将大图切片,分成许多小图片.然后进行逐个对比,并设定相似度阈值,判断是否是相同.最后整理,根据生成数组标记不同部分.如果切片足够小,便越能精确找出 ...
- Python-网络编程(三)
今天是网络编程的最后一天,明天会开始并发编程 socketserver模块实现并发 为什么要讲socketserver?我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用soc ...
- sauvola二值化算法研究
sauvola二值化算法研究 sauvola是一种考虑局部均值亮度的图像二值化方法, 以局部均值为基准在根据标准差做些微调.算法实现上一般用积分图方法 来实现.这个方法能很好的解决全局阈值方法的短 ...
- RoadFlowCore工作流2.8.1 更新日志
1.2.8.1更新了2.8刚发布的一些小BUG. 2.2.8.1增加了移动端,基于微信企业号或企业微信. 详细请参阅官方网站:roadflow.net
- andriod导入v4包导致的错误
最近升级android studio到版本3.0.1后,想要使用FragmentActivity这个类,导入v4包,发现R文件报错了,也就是找不到的意思. 如图:导包 此时选中v4包导进去. 确定之后 ...
- 删除List中指定的元素
删除List中指定的元素 CopyOnWriteArrayList是ArrayList的一个线程安全的变体实现,即可在多线程并发环境中使用 List<Map<String, Object& ...
- 新开篇关于vue
参考链接:http://cn.vuejs.org/v2/guide/instance.html 了解vue组件的生命周期: 1.beforeCreate 即将创建 2.created 创建 3.bef ...
- 微信小程序开发踩坑记
前言 微信小程序自去年公测以来,我司也申请了一个帐号开发,春节前后开始开发,现在终于告一个段落了.谨以此文记录下踩过的坑. 坑1:scroll-view与onPullDownRefresh冲突 由于有 ...
- 从Linux访问Windows共享目录
今天装备用VMWare装台Linux服务器来学习Oracle数据库,由于安装包是下载到本地的Windows系统,需要拷贝到Linux虚机里面去.搞了半天.想到虚机网络设成桥接,然后访问.百度了一下.最 ...