Appium原理小结

Api接口调用selenium的接口,Android底层用android的instrumentation(API2.3+ 通过绑定另外一个独立的selendroid项目来实现的)、uiautomator接口(API4.2+),iOS底层用ios的uiautomation接口。

Client/ServerArchitecture

Appium server是用Node.js写的,安装node.js可以直接用npm命令或dmg,server端功能:监听一个端口,接收client发送来的command,翻译这些命令,把这些command转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完command后把执行结果返回给appium server,appium再把执行结果返回给client。

Client其实就是发起command的设备,一般来说就是执行代码的机器,执行appium测试代码的机器,可以把client理解成代码,这些代码可以是Java、Python、ruby、js,只要实现了webdriver标准协议就可以。

跨语言:只要支持selenium webdriver api和这种语言相关的client libraries就可以。Server放在任意机器上,哪怕是云服务器都可以(appium和webdriver天生适合云测试)。

Session

session就是一个会话,在webdriver/appium,你的所有工作永远都是在session start后才可以进行的。一般来说,通过POST /session这个URL,然后传入Desired Capabilities就可以开启session了。

开启session后,会返回一个全局唯一的sessionid,以后几乎所有的请求都必须带上这个session id,因为这个seesion id代表了你所打开的浏览器或者是移动设备的模拟器。

进一步思考一下,由于session id是全局唯一,那么在同一台机器上启动多个session就变成了可能,这也就是selenium gird所依赖的具体理论根据。

Desired Capabilities

Desired Capabilities携带了一些配置信息。从本质上讲,这个东东是key-value形式的对象。你可以理解成是java里的map,python里的字典,ruby里的hash以及js里的json对象。实际上Desired Capabilities在传输时就是json对象。

Desired Capabilities最重要的作用是告诉server本次测试的上下文。这次是要进行浏览器测试还是移动端测试?如果是移动端测试的话是测试android还是ios,如果测试android的话那么我们要测试哪个app? server的这些疑问Desired Capabilities都必须给予解答,否则server不买账,自然就无法完成移动app或者是浏览器的启动。

Appium Clients

原生的webdriver api是为web端设计的,appium官方提供了一套appium client,为不同的语言的开发者可以测试自己的app,测试的时候,一般要使用这些client库去替换原生的webdriver库。算是client对原生webdriver进行了一些移动端的扩展。

android框架

ios框架

appium0.18.x到appium1.x 的改变

1.新的客户端库

appium客户端库取代原来的webdriver客户端库

from appium import webdriver取代fromselenium import webdriver

2.新的capabilities选项

不再使用device、version,使用platformName、platformVersion、deviceName、automationName(“Selendroid”如果是api2.3以上要选择,默认可以不填),udid(ios要指定设备标示)。

之前的app这项capability保留不变,但该项现在专门用在非browser类型的app上面,要测试Safari或Chrome浏览器应用,要使用标准的browserName,app和browserName都是专用的选项。

同时我们也用骆驼命名法重新统一命名了我们的Appium Server的capabilities。比如说原来的app-package和app-wait-activity将改成appPackage和appWaitActivity。当然,鉴于我们能自动检测到Android应用的包和activity,所以你可以大多时候忽略掉这些选项了。

3. 我们把以下的控件查找器策略给移除掉了:

name

tag name

我们现在引入了accessibility_id这个策略来取代原来name所做的事情(译者注:也就是说原来的AppiumDriver.findElementByName将会被现在的AppiumDriver.findElementByAccessibilityId取代)。当中细节将会根据你使用的Appium客户端(译者注:客户端语言)而有所不同。

新的class name将会取代原来的tag name(译者注:也就说原来的findElementByTagName将会被想在的findElementByClassName取代),所以如果你要根据一个控件的UI类型来查找出该控件,请使用class name这个控件查找器。

注意class name和xpath策略的变化:你现在需要使用FQCN来描述你的控件。也就是说如果你由一个xpath选择子如下所述:

//table/cell/button

那么现在要改为(译者注:也就是说原来的findElementByXpath(""//TextView[contains(@text,'Addnote')]"")将需要改成findElementByXpath("//android.widget.TextView[contains(@text,'Addnote')]"):

//UIATableView/UIATableCell/UIAButton

(如此类推:button现在就要写成android.widget.Button)

同时我们也添加了如下的控件定位器策略(译者注:也就是说入Andoid增加了AppiumDriver.findElementByUiAutomator):

iosuiautomation

androiduiautomator

请根据你使用的客户端(根据不同语言)库来确定如何使用新的控件定位器策略。

4.使用XML取代JSON

取得当前窗口的源码(译者注:也就是AppiumDriver.getPageSource函数)返回的格式将从原来的JSON改成XML。所以如果你之前的代码有依赖分析控件源码的地方必须做相应的更新。

5. 混合应用通过context而非window进行支持

如今Appium支持(跟切换上下文这个概念)更加概念一致的的“context”。为了取得所有可用的上下文或者你的应用特有的上下文,请使用如下方式:

# python driver.contexts current = driver.context

请使用如下方式进行切换:

# python driver.switch_to.context("WEBVIEW")

6. execute_script("mobile:xxx")将销声匿迹

所有”mobile:”相关的方法讲都会被剔除掉,并且被Appium客户端库的原生方法给替代掉。例如原来的driver.execute("mobile:lock",[5])将会被现在的driver.lock(5)所取代(这里lock这个功能已经成为了原生的客户方法了)。当然,具体的调用方法将会根据你所使用的不同的客户端库而有所不同了。

需要特别声明的是,手势操作相关的方法将会被新的TouchAction/MultiAction API所替代,把这些手势操作集合在一起将会使得你的手势操作相关的自动化更强大和通俗易懂。更详细的TouchAction/MultiAction的使用请查看你的的Appium客户端。

参考网址:

官网介绍:http://appium.io/slate/en/master/?python#appium

论坛:http://automationtesting.sinaapp.com/blog/appium

大神blog:http://blog.csdn.net/zhubaitian/article/details/39753945

Appium原理及版本变化细节的更多相关文章

  1. Appium原理

    Appium原理小结 Api接口调用selenium的接口,android底层用android的instrumentation(API2.3+ 通过绑定另外一个独立的selendroid项目来实现的) ...

  2. appium 原理解析(转载雷子老师博客)

    appium 原理解析 原博客地址:https://www.cnblogs.com/leiziv5/p/6427609.html Appium是 c/s模式的appium是基于 webdriver 协 ...

  3. Appium原理初步--Android自动化测试学习历程

    章节:自动化基础篇——Appium原理初步(第七讲) 本期关键词: Appium.跨语言跨平台.Bootstrap 主要讲解内容及笔记: 一.what is appium 一种封装了uiautomat ...

  4. Nmap原理02 - 版本探测介绍(上)

    Nmap原理02 - 版本探测介绍(上) 1.介绍 本文将介绍如何通过修改或添加nmap-service-probes文件来实现对nmap中未知服务的探测,首先介绍服务和版本探测的相关信息,然后介绍服 ...

  5. Python3.0-3.6的版本变化

    Table of Contents Python3.0 简单的变化 语法的变化 新语法 改动的语法 剩下的变化 Python3.1 Python3.2 Python3.3 Python3.4 Pyth ...

  6. 【RTOS】基于V7开发板的最新版uCOS-III V3.07.03程序模板,含MDK和IAR,支持uC/Probe,与之前版本变化较大

    模板下载: 链接:https://pan.baidu.com/s/1_4z_Lg51jMT87RrRM6Qs3g   提取码:2gns 对MDK的AC6也做了支持:https://www.cnblog ...

  7. 自动化测试_移动端测试(二)—— Appium原理

    一.什么是Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver ...

  8. appium V1.5.x变化

    使用 npm安装 appium之后,会发现已经进入1.5 [Appium] Welcome to Appium v1.5.0 [Appium] Appium REST http interface l ...

  9. HttpClient 版本变化 转载

    转载地址:http://my.oschina.net/u/577453/blog/173724 最近用到了HttpClient写爬虫,可能我有新版本强迫症,老是喜欢用新版本的东西(虽说新版本不一定好用 ...

随机推荐

  1. The Art of Deception

    前言 一些黑客毁坏别人的文件甚至整个硬盘,他们被称为电脑狂人(crackers)或计算机破坏者(vandals).另一些新手省去学习技术的麻烦,直接下载黑客工具侵入别人的计算机,这些人被称为脚本小子( ...

  2. 阅读日志: 微信小程序的风口只有一天?

    原文地址: 小程序的风口只有一天?难道我们用的是假的小程序 http://xudanei.baijia.baidu.com/article/755506 原文摘要: #,小程序的趋势,从1月10日至1 ...

  3. Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)

    1下载hadoop 2安装3个虚拟机并实现ssh免密码登录 2.1安装3个机器 2.2检查机器名称 2.3修改/etc/hosts文件 2.4 给3个机器生成秘钥文件 2.5 在hserver1上创建 ...

  4. 初识C#程序结构

    一.编写第一个C#程序.注释:   1.编写程序   static void Main(string[] args)//在Mian方法下编写代码输出数据         {             C ...

  5. MongoDB分页的Java实现和分页需求的思考

    前言 传统关系数据库中都提供了基于row number的分页功能,切换MongoDB后,想要实现分页,则需要修改一下思路. 传统分页思路 假设一页大小为10条.则 //page 1 1-10 //pa ...

  6. 日志收集以及分析:Splunk

    转自:http://blog.163.com/guaiguai_family/blog/static/20078414520132181010189/ 写代码的人都知道日志很重要,机器不多的时候,查看 ...

  7. Tensorflow高速入门2--实现手写数字识别

    Tensorflow高速入门2–实现手写数字识别 环境: 虚拟机ubuntun16.0.4 Tensorflow 版本号:0.12.0(仅使用cpu下) Tensorflow安装见: http://b ...

  8. javascript捕获事件event

    var e = e ? e : window.event; window.event ? window.event.cancelBubble = true : e.stopPropagation(); ...

  9. GitHub没有实时通知怎么办?当然是自己上手写一个啊!

    相信各位程序员对github已经不陌生了.不知道各位有没有注意到GitHub没有推送通知这个功能.当有人在我的存储库中创建了一个提取请求/问题时,我可以收到电子邮件通知,但当有人stars/forks ...

  10. Android Studio中关于9-patch格式图片的编译错误

    最近在编译Android Studio开发的项目中在使用了9宫图后出现了编译错误,尝试了多种方法未能解决,最后仔细查看出错的日志发现,居然是图片的原因,图片中包含有alpah通道所以在执行app:me ...