Appium 是一个开源工具,用于自动化 iOS 手机、 Android 手机和 Windows 桌面平台上的原生、移动 Web 和混合应用。

appium安卓设备通信流程:

脚本-----------------> appium server-----------------> bootstrap.jar-----------------> uiautomator2

脚本:PC端编写的自动化脚本

appium server:默认端口4723,负责监听4723

bootstrap.jar:在移动设备端开启一个socket服务把  从PC端发过来的命令转换为UIautomator   能够识别的命令并交给UIautomator执行

uiautomator2:python格式的移动端UI测试框架,可以对安卓应用进行自动化测试操作

1、开启appium server服务,默认地址为0.0.0.0,端口为4723,并将测试设备信息告诉appium server

4723端口专门和脚本打交道,基于webdriver协议,webdriver作用就是启动基于webdriver wire协议的appium服务,接下来,脚本与appium server的通信实际是一个http request给appium server,请求body中,会以webdriver wire协议规定的json格式字符串告诉appium服务希望设备做什么

这里引入一个名词,disired capabilities,以key-value键值对存在,负责存储设备配置信息,通过post请求发给appium server,告诉server需要操作哪台设备,哪个应用

appium server启动日志:

[Appium] Welcome to Appium v1.21.0

[Appium] Non-default server args:

[Appium] relaxedSecurityEnabled: true

[Appium] allowInsecure: {

[Appium] }

[Appium] denyInsecure: {

[Appium] }

[Appium] Appium REST http interface listener started on 0.0.0.0:4723

[HTTP] --> POST /wd/hub/session

[HTTP] {"desiredCapabilities":{"platformName":"android","platformVersion":"7.0","deviceName":"MaxiSys device","appPackage":"com.autel.cloud.smsus","appActivity":"com.autel.cloud.maxifixhd.module.SmsWebViewActivity","ensureWebviewsHavePages":true},"requiredCapabilities":{}}

[MJSONWP]Calling AppiumDriver.createSession() with args: [{"platformName":"android","platformVersion":"7.0","deviceName":"MaxiSys device","appPackage":"com.autel.cloud.smsus","appActivity":"com.autel.cloud.maxifixhd.module.SmsWebViewActivity","ensureWebviewsHavePages":true},{},null]

从日志中可以分析得到appium server的启动地址为0.0.0.0,监听端口为4723,启动以后,会像URL为 /wd/hub/session的地址发送一个POST请求,请求内容就是desiredCapabilities下的内容,负责告诉appium server需要操控的设备信息

2、测试设备信息告诉appium server以后,需要创建session会话

session称为会话控制,session对象存储特定用户会话所需的属性及配置信息,对应到这里就是desirewd capabilities中的信息,脚本通过发送http请求,传入desired capabilities就可以开启session了,第一次创建,appium会调用androidDriver为client生成一个session和sessionId,并将sessionId作为响应返回给客户端,下次脚本发出操作请求是就会自带sessionId作为唯一标识,server按照此标识检索带有请求的session并使用

session的作用就是在appium服务上保持设备的状态信息,在多次操作行为中,配置信息不会丢失,程序就不会断开,不需要每次发送带配置信息的请求

创建session会话日志:

[Appium] Appium v1.21.0 creating new AndroidUiautomator2Driver (v1.65.0) session

[Appium] Applying relaxed security to 'AndroidUiautomator2Driver' as per server command line argument. All insecure features will be enabled unless explicitly disabled by --deny-insecure

[BaseDriver] Creating session with MJSONWP desired capabilities: {

[BaseDriver] "platformName": "android",

[BaseDriver] "platformVersion": "7.0",

[BaseDriver] "deviceName": "MaxiSys device",

[BaseDriver] "appPackage": "com.autel.cloud.smsus",

[BaseDriver] "appActivity": "com.autel.cloud.maxifixhd.module.SmsWebViewActivity",

[BaseDriver] "ensureWebviewsHavePages": true

[BaseDriver] }

[BaseDriver] Session created with session id: 50969533-e5a6-4ce8-8df7-cedea24cedba

3、appium server创建4724端口,将bootstrap.jar文件推送到移动设备

Appium server启动一个监听端口4724,同时向手机adb push一个bootstrap.jar脚本,移动设备端通过该脚本同时监听4724

设备通过该端口传输的命令执行APP,bootstrap.jar是appium运行在安卓测试机的一个UIautomator测试脚本,唯一功能就是在目标机器开启一个socket服务器把一个session中appium从pc端发过来的命令给Uiautomator执行处理

创建session成功之前,就已经把bootstrap.jar放入到了设备中,并开启设备上的基于appium bootstrap 的socket服务,监听4724端口,等待客户端连接

4、PC端脚本发送http请求给appium server,再转发给bootstrap.jar,经其转换为UIautomator可以识别的脚本去运行

请求发送日志:

[HTTP] --> POST /wd/hub/session/50969533-e5a6-4ce8-8df7-cedea24cedba/element

[HTTP] {"using":"xpath","value":"//*[@text='允许']","sessionId":"50969533-e5a6-4ce8-8df7-cedea24cedba"}

[MJSONWP (50969533)] Calling AppiumDriver.findElement() with args: ["xpath","//*[@text='允许']","50969533-e5a6-4ce8-8df7-cedea24cedba"]

[BaseDriver] Valid locator strategies for this request: xpath, id, class name, accessibility id, css selector, -android uiautomator

[BaseDriver] Waiting up to 0 ms for condition

[WD Proxy] Matched '/element' to command name 'findElement'

[WD Proxy] Proxying [POST /element] to [POST http://127.0.0.1:8200/wd/hub/session/2b43e5d0-73b7-4dd6-aedb-ad92829fd155/element] with body: {"strategy":"xpath","selector":"//*[@text='允许']","context":"","multiple":false}

[WD Proxy] Got response with status 200: {"sessionId":"2b43e5d0-73b7-4dd6-aedb-ad92829fd155","value":{"ELEMENT":"40799411-1536-4b5f-8179-380ab057a3c2","element-6066-11e4-a52e-4f735466cecf":"40799411-1536-4b5f-8179-380ab057a3c2"}}

[MJSONWP (50969533)] Responding to client with driver.findElement() result: {"element-6066-11e4-a52e-4f735466cecf":"40799411-1536-4b5f-8179-380ab057a3c2","ELEMENT":"40799411-1536-4b5f-8179-380ab057a3c2"}

[HTTP] <-- POST /wd/hub/session/50969533-e5a6-4ce8-8df7-cedea24cedba/element 200 597

UIautomator:

uiautomator是谷歌在android4.1版本发布时推出的一款UI测试框架,通过该框架提供的API对安卓应用进行自动化测试操作,第一款uiautomator是由java编写的,后来经过大神改编为python框架,也就是现在说的UIautomator2

boostrap为什么可以将PC端命令转换为UIaotumator可以识别脚本?

因为boostrap实际是一个UIautomator写的case包,它的入口类继承自UIautomatorTestCase,因此可以调用UIautomator中的方法去运行

【Appium学习总结1】----原理相关推荐

  1. appium学习笔记

    appium学习笔记 第1节.2节课appium介绍和安装 开源.跨平台.多语言支持的移动应用自动化工具 测试对象 原生APP 混合APP 移动APP APP运行环境 真实设备 虚拟设备 测试程序语言 ...

  2. 深度学习Anchor Boxes原理与实战技术

    深度学习Anchor Boxes原理与实战技术 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的地面真实边界框.不同的模型 ...

  3. appium学习【二】:用try捕获异常后,用例的执行结果为pass

    appium学习[二]:用try捕获异常后,用例的执行结果为pass 参考文章: (1)appium学习[二]:用try捕获异常后,用例的执行结果为pass (2)https://www.cnblog ...

  4. Servlet学习笔记 Servlet原理

    Servlet学习笔记 Servlet原理 一.Servlet基础 1.Servlet执行过程 用户请求一个Servlet,Servlet容器自动构建请求和响应对象,然后执行Servlet的servi ...

  5. 深度学习attention原理_深度学习Anchor Boxes原理与实战技术

    深度学习Anchor Boxes原理与实战技术 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的地面真实边界框.不同的模型 ...

  6. 深度强化学习-DDPG算法原理和实现

    全文共3077个字,8张图,预计阅读时间15分钟. 基于值的强化学习算法的基本思想是根据当前的状态,计算采取每个动作的价值,然后根据价值贪心的选择动作.如果我们省略中间的步骤,即直接根据当前的状态来选 ...

  7. 利用计算机语言实现ID3算法,机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf...

    机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf 还剩 23页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保 ...

  8. 由浅入深学习Apache httpd原理与配置

    由浅入深学习Apache httpd原理与配置 原贴:http://jackcui.blog.51cto.com/11877206/1858989 文章防盗链地址:http://jackcui.blo ...

  9. 0基础怎样理解深度学习的工作原理?做个票价预测工具就懂了

    原作:Radu Raice 安妮 编译自 Medium 量子位 出品 | 公众号 QbitAI 这篇文章颇!具!人!气! 软件工程专业的学生Radu Raice近日发表了文章<Want to k ...

  10. 国科大学习资料--人工智能原理与算法-第四次作业解析(学长整理)

    国科大学习资料–人工智能原理与算法-第四次作业解析(张文生老师主讲)(4.4.4.12) 4.4 生成大量的八数码问题和八皇后问题并用以下算法分别求解(如果可能的话):爬山法(最陡上升和首选爬山法), ...

最新文章

  1. 【第41题】【062题库】2019年OCP认证062考试新题
  2. Pandas实用技能,数据筛选query函数详细介绍
  3. exec函数族(部分 最常用的)
  4. Unity3D中关于场景销毁时事件调用顺序的一点记录
  5. websocket创建失败_ie11 websocket连接建立时报SecurityError问题
  6. Java源代码加密工具(Allatori)用法说明
  7. 微信卡包开发(JS-JDK)
  8. 家庭版茄汁味锅包肉的做法
  9. window10 下载速度限制问题解决方案
  10. chmod 赋权所有_linux 命令 赋权 chmod
  11. 洛谷—— P1419 寻找段落
  12. 从键盘输入一个正整数 n,求 n!
  13. 峰会回顾 | 阿里云与StarRocks合作、开放、共赢
  14. HTML+CSS css3电子杂志画册3D翻页切换动画特效
  15. C/C#实现RSA签名
  16. 限制服务器访问ip(或端口)
  17. 计算机读心术的原理,读心术的原理笑容的奥秘
  18. Python——爬取某瓣电影评论信息并生成词云图
  19. matlab语音加入正弦噪声,基于Matlab的语音信号去噪声处理 毕业论文.doc
  20. 魅族flashfire_[FIRE]魅族魅蓝Note2公开版 解锁BL 刷入奇兔中文recovery教程

热门文章

  1. 基于环信webim视频语音通话
  2. 由SoC到SOPC、SoC FPGA ,异同优缺点的介绍及常见应用场景
  3. MAC 强制退出程序
  4. R机器学习:分类算法之判别分析LDA,QDA的原理与实现
  5. VS2013出现未能正确加载 microsoft.visualstudio.editor.implementation.editorpackage的解决方法
  6. csgo服务器响应参数,csgo必备弹道参数 影响弹道参数设置
  7. Linux Shell脚本语句执行失败,后续语句继续执行的问题
  8. 下一代个性化推荐系统
  9. 使用Guardium和QRadar检测数据库漏洞
  10. Visual Studio2019自定义项目模板