Appium 工作原理及 Desired Capabilities
一、Appium工作原理

脚本请求 ——> 4723端口appium server ——> 解析参数给PC端4724端口 ——> 发送给设备4724端口 ——> 通过设备4724端口发给bootstrap.jar ——> Bootstrap.jar把命令发给uiautomator
Json Wire Protocol:
它是一种协议,遵循REST风格,以JSON方法进行传输,是一系列的键值对,遵循W3C WebDriver Spec设计风格;appium中的Json wire protocol继承自selenium的webdriver wire protocol,并进行了扩展,使得Json wire protocol能够控制不同的移动设备的行为。
bootstrap:
bootstrap在appium中是以jar包的形式存在的,它的功能是作为一个socket服务,把Appium sever 发送的请求转化成uiautomator的命令来让uiautomator进行处理。
在创建session成功之前,appium就已将bootstrap.jar放入手机中,并开启设备上的基于appium bootstrap的socket服务,绑定本机和boostrap通信的端口号4724用于和Android设备通讯,默认监听4724端口,等待client的连接。
Uiautomator:
UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务。功能很强,可以对第三方App进行测试。它的初始版本发布在Android 4.3 (API level 18)及以上的android系统版本
Selendroid:
Selendroid和UiAutomator类似,也是Google提供的一个安卓自动化测试软件,适用于Android系统的本地应用程序和移动web的UI混合测试。它主要应用在 Android 4.2 (API level 17) 及以下的android系统版本
Instruments:
Instruments 一个很灵活的、强大的工具,是性能分析、动态跟踪 和分析OS X以及iOS代码的测试工具,appium ios封装了apple的 Instruments框架,主要使用Instruments里的UI Automation(Apple的自动化测试框架),然后在设备中注⼊入bootstrap.js进⾏行监听。
二、Desired Capabilities
Desired Capabilities携带了一些配置信息。从本质上讲,它是key-value形式的对象。可以理解成是java里的map,python里的字典,ruby里的hash以及js里的json对象。实际上Desired Capabilities在传输时就是json对象
Desired Capabilities常用键值对介绍:
automationName:使用哪种自动化引擎。appium(默认)还是Selendroid。
platformName: 平台的名称,iOS, Android, or FirefoxOS
platformVersion:移动设备的系统版本号,7.1, 4.4
deviceName: 设备名称,Android:可随意填写; IOS:instruments -s devices
udid:连接的物理设备的唯一设备标识 adb devices 可获取
app:本地绝对路径_或_远程 http URL 所指向的一个安装包(.ipa,.apk,或 .zip文件)。Appium 将其安装到合适的设备上。如果指定了 appPackage 和
appActivity 参数,Android 则不需要此参数了。该参数也与 browserName 不兼容。
browserName:测试的web浏览器,如果是测app则忽略
newCommandTimeout :用于客户端在退出或者结束 session 之前,Appium 等待客户端发送一条新命令所花费的时间(秒为单位)
noReset:在当前session前不重置app状态,默认值为 false
fullReset:(iOS)删除所有的模拟器文件夹。(Android) 要清除 app 里的数据,请将应用卸载才能达到重置应用的效果。在 Android, 在 session 完成之后也会将应用卸载掉。默认值为 false
Desired Capabilities android特有键值对介绍:
appPackage:运行的 Android 应用的包名appActivity:Activity 的名字是指从你的包中所要启动的 Android acticity。通常需要再前面添加‘.’
unicodeKeyboard:使用 Unicode 输入法。 默认值为 false
resetKeyboard:在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。如果单独使用,将会被忽略。默认值为 false
noSign:跳过检查和对应用进行 debug 签名的步骤。仅适用于 UiAutomator,不适用于 selendroid。 默认值为 false
最全:
https://github.com/appium/appium/blob/master/docs/cn/writing-running-
appium/caps.md
目前调试测试脚本(测试网页):
import time
from appium import webdriver des = {
"platformName": "Android",
"platformVersion": "8.0",
"deviceName": "Samsung Galaxy S8",
"udid":"192.168.165.101:5555",
'browserName': 'chrome',
'noReset': True,
'unicodeKeyboard': True,
'resetKeyboard': True,
'chromedriverExecutable':'C:/Program Files/Appium/resources/app/node_modules/appium/node_modules/appium-chromedriver/chromedriver/win/chromedriver.exe'
} driver = webdriver.Remote('http://localhost:4723/wd/hub',des)
time.sleep(1)
# driver.get('https://www.baidu.com')
driver.get('https://www.qq.com')
测试APP:
import time
from appium import webdriver des = {
"platformName": "Android",
"platformVersion": "8.0",
"deviceName": "Samsung Galaxy S8",
"udid":"192.168.165.101:5555",
"appPackage": "com.android.calculator2",
"appActivity": ".Calculator",
'noReset': True,
'unicodeKeyboard': True,
'resetKeyboard': True
} driver = webdriver.Remote('http://localhost:4723/wd/hub',des)
Appium 工作原理及 Desired Capabilities的更多相关文章
- appium入门篇之desired capabilities(2)
目录 1.appium工作原理 desired capabilities 2.准备工作 3.第一个appium脚本 获取包名和启动的activity 编写脚本 运行结果 1.appium工作原理 启动 ...
- [转载]Appium工作原理
[Appium]Appium工作原理 2017-09-13 15:28 sophia194910 阅读(7658) 评论(0) 编辑 收藏 参考:http://www.cnblogs.com/zhjs ...
- 【Appium】Appium工作原理
参考:http://www.cnblogs.com/zhjsll/p/5698878.html 原作者写的很好,所以直接放在这里. 一.什么是Appium Appium是一个开源.跨平台的测试框架,可 ...
- appium工作原理
Appium原理 面试的时候,被问到appium原理,一点不会,实在尴尬.大家可以直接翻看原作https://blog.csdn.net/jffhy2017/article/details/69220 ...
- 【Appium】Appium工作原理(2)
Appium原理 面试的时候,被问到appium原理,一点不会,实在尴尬. 大家可以直接翻看原作https://blog.csdn.net/jffhy2017/article/details/6922 ...
- Java&Python&Appium 驱动APP及Desired Capabilities配置
一.摘要 本篇博文,将阐述如何将环境&代码&APP联系起来工作 二.Java代码 我们先看一段真实的java代码,我将他放在了TestNG框架的@BeforeTest里,执行这段即可启 ...
- 全网最全最细的appium自动化测试环境搭建教程以及appium工作原理
一.前言 对于appium自动化测试环境的搭建我相信90%的自学者都是在痛苦中挣扎,在挣扎中放弃,在放弃后又重新开始,只有10%的人,人品比较好,能够很快并顺利的搭建成功.appium 自动化测试 ...
- Appium Python 三:Desired capabilities
简介 Desired capabilities 是一些键值对的集合.python里面就采用字典的方式. 客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试.比如,我们可以把 platformNa ...
- Appium基础四:Desired Capabilities详讲
Desired Capabilities在启动session的时候是必须提供的,先看如下代码: Desired Capabilities本质上是key value的对象,他告诉appium serve ...
随机推荐
- 子域名探测工具Aquatone的使用
目录 Aquatone Aquatone的安装 Aquatone的使用 子域名爆破 端口扫描
- 手动添加导入表修改EXE功能
目标: 改动PE导入表,手工给HelloWorld增加一个功能,就是启动的时候写入一条开机启动项,C:\cmd0000000000000000000000000000.exe 实现方法: 直接在注册相 ...
- (Py练习)输出乘法口诀表
#输出9*9乘法口诀表 for i in range(1,10): for j in range(1,i+1): print("%d*%d=%2d"%(i,j,i*j),end = ...
- spring泛型注入
泛型依赖注入 Spring 4.0版本中更新了很多新功能,其中比较重要的一个就是对带泛型的Bean进行依赖注入的支持. 泛型依赖注入允许我们在使用spring进行依赖注入的同时,利用泛型的优点对代码进 ...
- layui处理表单/按钮进行多次提交
在一个项目中,我们最频繁的操作是CRUD,所以一定有涉及到按钮的操作.比如:确认保存,确认编辑,确认删除等等.所以,为了避免表单进行多次提交就显得特别地重要. 代码实现 知识点 $(':button' ...
- Mybatis-Plus01 快速开始
Mybatis-Plus虽然官网上有一个快速开始,但是实际操作有点问题,所以,自己写了一个. 版本说明 如果用其他软件版本可能会有部分差异 mybatis-plus:3.4.0 之前我是使用的是3.0 ...
- 基于python对B站收藏夹按照视频发布时间进行排序
基于python对B站收藏夹按照视频发布时间进行排序 前言 在最一开始,我的B站收藏一直是存放在默认收藏夹中,但是随着视频收藏的越来越多,没有分类的视频放在一起,想在众多视频中找到想要的视频非常困难, ...
- Docker镜像讲解
Docker镜像讲解 镜像是什么 镜像是一种轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境的开发软件,它包含运行某个软件做需要的所有的内容,包括代码,运行时,库,环境变量和配置文件. ...
- 使用JSONassert进行JSON对象对比
在日常工作中,会接到用户提出一张订单,修改后需要记录每次修改的信息,然后需要查看修改前后的差异信息这样的需求.要实现这样的功能方式有很多.下面介绍下JSONassert的简单使用,也方便自己后续使 ...
- traceroute排查网络故障 www.qq.com排查网络故障网络不通 先ping自己
网络不通 先ping自己 在ping网关 再ping外网 再ping别人的ip 背景需求 Linux 因为其强大的网络处理能力,被广泛用于网关(实例链接)和服务器(实例链接).实际工作中,快速排查这些 ...