移动测试 Appium源码初探
移动测试 Appium源码初探
介绍
Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用。
“移动原生应用”是指那些用 iOS 或者 Android SDK 写的应用。
“移动 web 应用”是指使用移动浏览器访问的应用(Appium 支持 iOS 上的 Safari 和 Android 上的 Chrome)。
“混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。
文档
首先我们先看下Appium的官方文档地址:
入门手册:http://appium.io/tutorial.html
中文文档:http://appium.io/slate/cn/master/
安装
Appium支持各种语言的类库驱动来做移动端自动化测试,这些类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON 格式selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。
Appium客户端类库实现了Mobile JSON Wire Protocol(一个标准协议的官方扩展草稿)和W3C Webdriver spec(一个传输不可预知的自动化协议,该协议定义了MultiAction 接口)的元素。
下面我们看下如何安装Python版的驱动类库:
python pip 环境不会弄?参见这:[快学Python3]环境安装
使用pip命令来安装:
pip install Appium-Python-Client
通过git来安装:
git clone git@github.com:appium/python-client.git
cd python-client
python setup.py install
不管是哪种方式,安装完成后在你的python安装目录,以笔者的为例(笔者为Python3.6,安装在C:Python36目录下),你可以在以下目录找到已经安装的Appium-Python-Client的源码:
C:Python36Libsite-packagesappium
目录说明
Appium-Python-Client安装好后,其目录结构如下图所示:
appium下一级目录如下图:
common: 用于定义了Appium-Python-Cliennt的通用类,该目录下的exceptions.py定义了content(你可以翻译为上下文环境)异常基类
webdriver: Appium-Python-Client的核心模块,定义了各种错误、命令和方法,后面就这个package进行详解说明
__init__.py: 你懂的,不懂也别找我^_^
saucetestcase.py: 设备枚举和一些初始化、清理功能的实现
下面重点对webdriver这个package进行说明
webdriver
必须注意的时,Appium客户端驱动包是基于json wire protocol实现的,其依赖selenium2中的webdriver,所以在实际是应用Appium-Python-Client时,是需要先安装selenium2的。
下面我们对Appium-Python-Client中最核心的功能package webdriver进行分析说明:
先看下图红色框中的即为webdriver的目录结构:
下面对webdriver下各模块进行说明:
common/mobileby.py: 定义了移动测试端专用的一些定位方法
common/multi_action.py: 定义和实现了如何把移动端操作串起来的方法
common/touch_action.py: 定义和实现了的移动端的一些动作行为
connectiontype.py: 定义了设备连接的类型
errorhandler.py: 定义和实现移动端错误处理类
mobilecommand.py: 定义了移动端json wire protocol的命令
switch_to.py: 定义和实现了移动端web view上下文环境切换类
webdriver.py: 最基础核心的模块,定义和实现了各种常用方法(例如查找、拖曳、滚动等等)
webelement.py: 最基础核心的模块,定义和实现了元素常用的方法(例如查找,设置值等等)
__init__.py: 你懂的,对外导出了webdrive和webelement模块中的对象
- BZOJ1299: [LLH邀请赛]巧克力棒(Nim游戏)
- 2301: [HAOI2011]Problem b
- mysql相关命令
- mac python3 安装 mysqlclient包失败如何解救
- SQL Server 深入解析索引存储(上)
- 1475: 方格取数
- python3 将字典,列表等转换成字符串形式存入mysql数据库并复原成字典,列表(处理稍复杂的格式)
- 1441: Min
- 2429: [HAOI2006]聪明的猴子
- 使用apt-get 安装后的mysql 登录问题
- SQL Server 深入解析索引存储(中)
- 1789: [Ahoi2008]Necklace Y型项链
- 3399: [Usaco2009 Mar]Sand Castle城堡
- 遗传算法(1)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- solidity modifier函数修改器 智能合约开发知识浅学(三)
- solidity struct 结构体创建与使用浅学 (四)
- solidity bytes 智能合约开发知识浅学(五点一)bytes基本概念
- Web程序员的Mysql进阶序二之sql多条数据插入、多条数据更新、多表同时查询
- Web程序员的Mysql进阶序三之sql多表数据删除、子查询、联合查询
- nginx 修改配置文件使之支持pathinfo,且隐藏index.php
- 微信jssdk开发,PHP,必要步骤
- 微信JSSDK分享页面自定义当前链接最简单示例
- (一)python3 只需3小时带你轻松入门—— 编程尝试
- (二)python3 只需3小时带你轻松入门——基本变量
- (三)python3 只需3小时带你轻松入门—— 变量的简单运算
- (四)python3 只需3小时带你轻松入门—— 流程控制
- (五)python3 只需3小时带你轻松入门—— 逻辑运算符
- (六)python3 只需3小时带你轻松入门——循环
- (七)python3 只需3小时带你轻松入门——List与dict