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 有四大组件:

  1. Selendroid-Client:Java 客户端(基于 Selenium Webdriver API 实现的)
  2. Selendroid-Server:运行在安卓设备中 instrumentation server。和被测应用统一签名, 运行在同一进程。
  3. AndroidDriver-App:一个 android webview 应用,用来测试移动网页的。
  4. Selendroid-Standalone:大管家,负责将 Selendroid-Server 和 被测应用安装到设备中 去,同时负责管理不同的安卓设备。

Selendroid Client

你可以把 Selendroid Client 看成传统的 Webdriver Java Client + 移动特性的实现。

Selendroid 为在门户网页时代的自动化测试人员提供了无缝的接入。任何一个熟悉 Selenium Webdriver 的人都能轻易上手。

Selendroid Server

Selendroid Server 本身是一个 instrumentation,这个就像大家熟悉的 instrumentation 测试里面的测试应用。

  1. Selendroid Server 是一个 instrumentation apk。
  2. 这个 apk 里面起了一个 HTTP Server。
  3. 这个 HttpServer 实现了 Selenium Webdiver 的协议。 从Selendroid Client 过来的请求会映射到各个不同的处理方法中去。
  4. 而各个不同的处理方法,则是去通过 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 测试用例前,我们都需要招呼这个管家起来工作,所以准确来说这个管家主要会做以下几件事:

  1. 启动一个 HttpServer,接受来自客户端的请求。
  2. 对 selendroid-server,被测应用等 apk 进行统一签名。
  3. 根据客户端脚本参数初始化设备,比如和模拟器或者真机建立连接。
  4. 安装相关的应用。
  5. 将设备上的端口 forward 到 pc 机,打通selendroid-client 和 selendroid-server 之间的通讯。
  6. 实现了一些额外的接口,比如通过 adb 执行命令。

另外,大管家还维护两个池子:

  1. deviceStore: 大管家启动的时候,会找到机器上所有的 android 模拟器和连接的 android 设备,把这些设备信息添加到 deviceStore 中去,以备后续脚本使用。(大管家有两个监听器,分别对模拟器和真机的变化做监听,这样就可以实时更新池子。)
  2. appStore:我们启动大管家的时候会传 aut 给他,大管家会把这个 aut 加入到 appStore 中去。

初识selendroid的更多相关文章

  1. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  2. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  3. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  4. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

  5. UI篇(初识君面)

    我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...

  6. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  7. 初识SpringMvc

    初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...

  8. 初识redis数据类型

    初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...

  9. Redis初识、设计思想与一些学习资源推荐

    一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...

随机推荐

  1. HTML5 UI框架Kendo UI Web中如何实现Grid网格控件本地化

    Kendo UI Web包含数百个创建HTML5 web app的必备元素,包括UI组件.数据源.验证.一个MVVM框架.主题.模板等. 为了使得产品可以符合不同市场的本地化需求和语言,Kendo U ...

  2. python 学习笔记十三 JQuery(进阶篇)

    jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. 安装jQuery 有两个版本的 jQuery 可供下载: Production versio ...

  3. mysql5.6中 order by 多个字段排序问题

    今天用order by排序 后面跟了多个字段,如sql语句: SELECT a.id,a.loginname,a.address,u.id,u.`name`,u.address FROM admin_ ...

  4. winform开发框架之模块维护

    前言:模块维护试图解决的问题, 模块加载只用MEF的方式: MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库 ...

  5. python model对象转为dict数据

    在接口通讯里经常遇到这种需求,需要将对象的字段名和值均传至接口,user = User.objects.get(id=1)笨方法1,没错,我这样写过:di = {}di['username'] = u ...

  6. consul笔记-集群加入的问题

    加入集群的问题 1 只有2个server的时候,一个挂掉,不会选举出新的leader. 2 使用 -bootstrap 可以直接启动为leader,这和-bootstrap-expect 是有区别的 ...

  7. FireFox中iframe的返回上页问题

    -----已测试,可以使用----- 原文地址链接:http://fansofjava.iteye.com/blog/1019852 在写静态页面过程中遇到了FF的history.back()和his ...

  8. 浏览器何时发送一个Option请求

    Http Options Method 简而言之,OPTIONS请求方法的主要用途有两个: 1.获取服务器支持的HTTP请求方法: 2.用来检查服务器的性能. CORS(跨域资源共享) CORS是一种 ...

  9. 解决方法 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 然后再删除 ...

  10. 【转载】CSS规范

    原文地址:http://www.cnblogs.com/whitewolf/p/4491707.html 目录 HTML 语法 HTML5 doctype 语言属性(Language attribut ...