初识selendroid
Testerhome社区的lihuazhang对selendroid官网的部分内容进行了翻译和讲解。
以下内容均摘自lihuazhang。感谢lihuazhang的讲解。原文地址:https://github.com/lihuazhang/selendroid
一、什么是 Selendroid
简介
Selendroid 是一个测试自动化框架,支持 Android 的原生应用,混合应用和移动 Web。软件测试工程师可以使用 Selenium 2 的客户端 API 来写自动化测试脚本。Selendroid 由 eBay Software Foundation 发起,是一个开源项目,由众多人士支持。目前代码 base 在 github 上。
支持的设备
Selendroid 支持且仅支持 Android 的模拟器和真机。同时可以集成到 Selenium Grid 中去进行大规模或者并发测试。
如果想用 Webdriver 来测试 iOS 的原生应用,混合应用和移动 Web的话,我们推荐 iosdriver。
特性
- 完全兼容 Webdriver 的 JSON Wire Protocol
- 不需要为了自动化修改被测应用
- 使用一个 Android webview 应用来测试移动网页
- 原生和混合应用自动化采用同样的理念
- 使用不同的定位方式来查找 UI 元素
- 支持手势:高级用户交互接口
- Selendroid 可以同时和多台设备(模拟器或者真机)交互
- 可以自动启动模拟器
- 支持真机热插拔
- 可以充当一个节点完全整合进 Selenium Grid,进行大规模和并发测试。
- 支持多个 Android API (10到19)
- 提供 Inspector 简化测试脚本开发
- 可以扩展自己的插件!
二、Selendroid和其他框架的区别
Android 基于 UI 层面的自动化测试工具,都可以理解为是基于 Android 控件层面的,涉及原生控件和 WebView 两大类。
目前主流的测试方法主要有以下几种:
1. 通过 Android 提供的各种服务,来获取当前窗口的视图信息(通常是 dump 布局控件为 xml 文件)。然后,在当前视图内查找目标控件,并根据该控件属性信息计算出该控件中心点的坐标,进而构造出一个 Android Input 事件来实现对应用的自动化测试。其主要特点是:测试代码和被测应用各自运行在各自的进程内,相互独立。其代表有 Uiautomator。
2. 基于 Instrumentation,通过把测试代码和应用代码,确切地说是测试 APK 和被测 APK,运行在同一个进程中,通过 Java 反射机制,来获取当前窗口所有视图,并根据该视图查找到目标控件的属性信息,并计算出目标控件中心点坐标。然后,利用 Instrument 内部接口,实现点击操作。其代表有 Robotium。 Selendroid 属于第二种,基于 Instrumentation。
三、基本组件

Selendroid 有四大组件:
- Selendroid-Client:Java 客户端(基于 Selenium Webdriver API 实现的)
- Selendroid-Server:运行在安卓设备中 instrumentation server。和被测应用统一签名, 运行在同一进程。
- AndroidDriver-App:一个 android webview 应用,用来测试移动网页的。
- Selendroid-Standalone:大管家,负责将 Selendroid-Server 和 被测应用安装到设备中 去,同时负责管理不同的安卓设备。
Selendroid Client
你可以把 Selendroid Client 看成传统的 Webdriver Java Client + 移动特性的实现。
Selendroid 为在门户网页时代的自动化测试人员提供了无缝的接入。任何一个熟悉 Selenium Webdriver 的人都能轻易上手。
Selendroid Server
Selendroid Server 本身是一个 instrumentation,这个就像大家熟悉的 instrumentation 测试里面的测试应用。
- Selendroid Server 是一个 instrumentation apk。
- 这个 apk 里面起了一个 HTTP Server。
- 这个 HttpServer 实现了 Selenium Webdiver 的协议。 从Selendroid Client 过来的请求会映射到各个不同的处理方法中去。
- 而各个不同的处理方法,则是去通过 instrumentation 这个框架去和设备沟通,得到执行的结果,再由 HttpServer 返回到设备外部。
AndroidDriver-App
这个就是一个 Android APP。只有一个 WebViewActivity。
这个应用的作用只有一个,当测试移动网页的时候,客户端的 Capabilities 设置为 SelendroidCapabilities.android(),设备中就会使用这个 apk 来作为移动网页的载体。
说白了,其实就充当了一个浏览器的作用。
Selendroid-Standalone
在前面我们说了,Selendroid Server 和 AndroidDriver 都是 apk,那这些 apk 是怎么被安装到设备中去呢?
Selendroid Server 启动的 HttpServer 在设备中,客户端测试脚本在 PC 机上,他们又是怎么沟通的呢?
客户端脚本怎么知道去哪个设备执行用例呢?
这些问题就要问 Selendroid 的大总管 —— Selendroid-Standalone。
Selendroid-Standalone 在 selendroid-client 和 selendroid-server 之间扮演了一个代理的角色。
在执行 Selendroid 测试用例前,我们都需要招呼这个管家起来工作,所以准确来说这个管家主要会做以下几件事:
- 启动一个 HttpServer,接受来自客户端的请求。
- 对 selendroid-server,被测应用等 apk 进行统一签名。
- 根据客户端脚本参数初始化设备,比如和模拟器或者真机建立连接。
- 安装相关的应用。
- 将设备上的端口 forward 到 pc 机,打通selendroid-client 和 selendroid-server 之间的通讯。
- 实现了一些额外的接口,比如通过 adb 执行命令。
另外,大管家还维护两个池子:
- deviceStore: 大管家启动的时候,会找到机器上所有的 android 模拟器和连接的 android 设备,把这些设备信息添加到 deviceStore 中去,以备后续脚本使用。(大管家有两个监听器,分别对模拟器和真机的变化做监听,这样就可以实时更新池子。)
- appStore:我们启动大管家的时候会传 aut 给他,大管家会把这个 aut 加入到 appStore 中去。
初识selendroid的更多相关文章
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
- Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
随机推荐
- HTML5 UI框架Kendo UI Web中如何实现Grid网格控件本地化
Kendo UI Web包含数百个创建HTML5 web app的必备元素,包括UI组件.数据源.验证.一个MVVM框架.主题.模板等. 为了使得产品可以符合不同市场的本地化需求和语言,Kendo U ...
- python 学习笔记十三 JQuery(进阶篇)
jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. 安装jQuery 有两个版本的 jQuery 可供下载: Production versio ...
- mysql5.6中 order by 多个字段排序问题
今天用order by排序 后面跟了多个字段,如sql语句: SELECT a.id,a.loginname,a.address,u.id,u.`name`,u.address FROM admin_ ...
- winform开发框架之模块维护
前言:模块维护试图解决的问题, 模块加载只用MEF的方式: MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库 ...
- python model对象转为dict数据
在接口通讯里经常遇到这种需求,需要将对象的字段名和值均传至接口,user = User.objects.get(id=1)笨方法1,没错,我这样写过:di = {}di['username'] = u ...
- consul笔记-集群加入的问题
加入集群的问题 1 只有2个server的时候,一个挂掉,不会选举出新的leader. 2 使用 -bootstrap 可以直接启动为leader,这和-bootstrap-expect 是有区别的 ...
- FireFox中iframe的返回上页问题
-----已测试,可以使用----- 原文地址链接:http://fansofjava.iteye.com/blog/1019852 在写静态页面过程中遇到了FF的history.back()和his ...
- 浏览器何时发送一个Option请求
Http Options Method 简而言之,OPTIONS请求方法的主要用途有两个: 1.获取服务器支持的HTTP请求方法: 2.用来检查服务器的性能. CORS(跨域资源共享) CORS是一种 ...
- 解决方法 test: database removal failed: ERROR: database "test" is being accessed by other users
select * from pg_stat_activity where datname='test'; 找出哪个进程用了这个数据库,然后删除这个进程(pid) kill -9 47182 然后再删除 ...
- 【转载】CSS规范
原文地址:http://www.cnblogs.com/whitewolf/p/4491707.html 目录 HTML 语法 HTML5 doctype 语言属性(Language attribut ...