很多同学经过一段时间的学习之后都明白了Appium的基本原理,但是越学习到后面发现出现的很多陌生名词无法弄清楚其具体作用,今天这篇文章的目的就是为了让大家来弄懂三个高频名词:UiAutomator、UiAutomator2、Bootstrap。

首先来说下UiAutomator和bootstrap:

  UiAutomator是Android自动化测试框架,是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架。其最大的特点就是可以跨进程操作,我们可以使用UiAutomator框架提供的一些方便的API来对安卓应用进行一系列的自动化测试操作,如点击、滑动、键盘输入、长按以及常用的断言方法等。可以替代以前繁琐的手工测试。

  Bootstrap是Appium在初始化的时候推送到安卓手机上的一个UiAutomator测试脚本,该脚本的唯一一个测试方法所做的事情是在手机端开启一个SocketServer(通信模块),用来监听Appium从PC端过来的命令发送给UiAutomator来执行处理。

  下图为官方提供的原理图:

WebDriver script:

  我们的测试脚本(java or python)

Appium:

  会首先开启一个监听4723端口的server,接收测试脚本发送过来的对应请求,再讲对应的请求发送给中间件Bootstrap.jar(注意这里的请求不是整个脚本文件,而是对应的命令请求,比如:点击一个元素就是一条请求)

Bootstrap.jar:

  监听4724端口由appium发送过来的相关请求,并且将请求转换成UiAutomator可以识别的命令发给UiAutomator进行处理

UiAutomator2:

说到这里相信大家已经了解了这两者的关系,那为什么还会有UiAutomator2,难道是UiAutomator的升级版本?没错!

appium在最近有加入了UiAutomator2(也可称为UiAutomator V2)来支持实现Android端自动化,原理同之前的UiAutomator+Bootstrap有很大的不同:

为了能够支持UiAutomator2,Appium引入了appium-uiautomator2-server

以下是其官网的wiki介绍,英文基础较好的同学可以去看看

https://github.com/appium/appium-uiautomator2-server/wiki

肯定还是有比较多同学对英文犯晕的,那我就给大家翻译翻译下:

1、Appium使用UiAutomator2的目的是为了替换掉之前的UiAutomator+Bootstrap模式

2、Bootstrap是基于UiAutomator V1(即为UiAutomator)的,但是UiAutomator很多Api基本上官方不再维护了

3、UiAutomator V2修复了UiAutomator V1中遇到的大多数问题,最重要的是实现了与Android系统更新的分离

有看到我们公开课的同学或者VIP课程的同学比较清楚:在获取到toast信息的时候需要将automationName设置成UiAutomator2,就是因为在UiAutomator2上新增了AccessibilityService服务,可以实现Toast的获取。

以下是其使用原理图:

WebDriver script:

  不用多说,就是我们的执行脚本

Appium:

  客户端传递desired capabilities属性配置给Appium Server来创建一个会话,Appium Server会调用appium-uiautomator2-driver,同时将UiAutomator2 server的两个apk安装到测试设备上

  1、appium-uiautomator2-server-vx.x.x.APK

  2、appium-uiautomator2-server-debug-androidTest.apk

UiAutomator2 server两个apk的作用:

  1、UiAutomator2 驱动模块,负责创建会话,安装UiAutomator2-server.apk到设备上,开启Netty(这是一个通信框架,相当于Bootstrap使用的SocketServer升级版本)

  2、UiAutomator2服务器模块,当驱动模块创初始化完毕,服务器就会监听PC端Appium发送过来的请求,将请求发送给真正底层的UiAutomator2。

UiAutomator、UiAutomator2、Bootstrap的关系的更多相关文章

  1. 两分钟搞懂UiAutomator、UiAutomator2、Bootstrap的关系

    很多同学经过一段时间的学习之后都明白了Appium的基本原理,但是越学习到后面发现出现的很多陌生名词无法弄清楚其具体作用,今天这篇文章的目的就是为了让大家来弄懂三个高频名词:UiAutomator.U ...

  2. jquery, jquery-ui, requirejs, bootstrap 的关系理解

    jquery 是 基于 javascript 的一个语法衍生,更方便操作dom, 事件,css 整体来说更好用,更简洁. jquery-ui 是基于 jquery 实现的各种更好看,交互更友好的的界面 ...

  3. App 自动化,Appium 凭什么使用 UiAutomator2?

    1. UiAutomator2 是什么 可能很多人对 UiAutomator2 和 UiAutomator 傻傻分不清楚 UiAutomator 是 Google 开发的一款运行在 Android 设 ...

  4. 移动端自动化测试之Appium的工作原理学习

    Appium 简介 参考官网文档说明:http://appium.io/docs/en/about-appium/intro/ Appium官方文档上介绍,Appium 是一个自动化测试的开源工具,支 ...

  5. Appium 介绍与环境搭建

    目录 Appium 介绍 APP 自动化测试介绍 什么是 Appium ? Appium 优势 Appium 架构 Appium 生态 Appium 组件 UiAutomator API Bootst ...

  6. 【Flask】 WTForm表单编程

    WTForm表单编程 在网页中,为了和用户进行信息交互总是不得不出现一些表单.flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据.WTForm中最重要的几个概念如下: Fo ...

  7. 把本人基于Dubbo的毕业设计分享粗来~

    这个毕业设计不是太让我满意,可能时间关系吧,但是现在工作了我也懒得没时间去完善了[目前也就有一个功能没完成,就是给产品经理送绿帽子的模块] 项目地址:GitHub 技术栈:Spring+SpringM ...

  8. AngularJS模块具体解释

    模块是提供一些特殊服务的功能块.比方本地化模块负责文字本地化,验证模块负责数据验证.一般来说,服务在模块内部,当我们须要某个服务的时候,是先把模块实例化.然后再调用模块的方法. 但Angular模块和 ...

  9. 想进BAT?这些面试题助你一臂之力

    1 软性热身题 这种题目,考的就是你的软性能力,比如表达能力,理解能力,协调能力,一个词概括就是套路.这类题目会在面试开始热身的时候,问一道两题,不会多,但是如果你能回答的有条不紊,清晰达意,那么就会 ...

随机推荐

  1. (转)【mysql元数据库】使用information_schema.tables查询数据库和数据表信息 ---数据记录大小统计

    转:https://www.cnblogs.com/ssslinppp/p/6178636.html https://segmentfault.com/q/1010000007268994?_ea=1 ...

  2. Python3.5自带venv创建虚拟环境

    为每个程序单独创建虚拟环境可以保证程序只能访问虚拟环境中的包,保持全局解释器的干净整洁,使其只作为创建(更多)虚拟环境的源. windows下创建虚拟环境 Python3.5自带venv,只需执行py ...

  3. 【转载】Spring boot学习记录(一)-入门篇

    前言:本系列文章非本人原创,转自:http://tengj.top/2017/04/24/springboot0/ 正文 首先声明,Spring Boot不是一门新技术.从本质上来说,Spring B ...

  4. JavaScript.import

    // --file.js-- function getJSON(url, callback) {   let xhr = new XMLHttpRequest();   xhr.onload = fu ...

  5. Linux终端下简单的登录程序 密码不回显

    在Linux进行登录是输入密码不会被回显,所以我也写了个简单的登入程序,使得在输入密码时不再进行回显. #include <stdio.h> #include <stdlib.h&g ...

  6. Codeforces 1105C (DP)

    题面 传送门 分析 这种计数问题,要不是纯数学推公式,要不就是dp 先处理出[l,r]中除3余0,1,2的数的个数,记为cnt0,cnt1,cnt2 设\(dp[i][j]\)表示前i个数的和除3余j ...

  7. python小学堂1

    sun=0 start=1 while True: start1=start%2 if start1==1: sun = start + sun elif start1==0: sun=sun-sta ...

  8. k3 cloud移动审批提示实体类型BD_TaxRate中不存在名为AmountDigits属性

    原因是由于字段没有正确绑定币别,找到对应的字段并修改绑定币别

  9. Spike Your CPU’s Processor in .Net

    using System.Threading; using System.Runtime.InteropServices; // Target a specific processor for the ...

  10. 一、Iframe

    一.Iframe 自适应iframe的高 <!-- frameborder :设置iframe的边框 scrolling:设置iframe的滚动条 src:设置iframe的路径 onload: ...