深入了解UIAutomation 的API
有关UiAUiAutomation的API对象的文件名称。
1、UIAutomation中的对象都是以UIA#####开头的出现的。eg:UIAButton
2、有关Logger对象负责日志的输出
UIALogger类的作用到:1)记录測试的结果 2)负责各个级别的结果的日志的输出
通常:我们会看看到logStart(message) 開始,以失败或者成功j结束。
以下是一个实例:(对应的測试代码)
var target = UIATarget.localTarget();
var testName = "Module 001 Test";
UIALogger.logStart(testName);
UIALogger.logMessage("test");
UIALogger.logDebug("debug");
target.logElementTree();
UIALogger.logPass(testName);
UIALogger.logWarning("it is not instrict");
UIALogger.logError("错误");
结果:(下图)
对应的知识点集合:
測试的状态:(记录測试的结果输出)
(undefined) logFail(String message) //測试失败
(undefined) logIssue(String message) //測试终止异常
(undefined) logPass(String message) //表示測成功
(undefined) logStart(String message) //表示測试開始 測试的安全级别:(负责各个级别的日志结果输出)
(undefined) logDebug(String message)
//測试级别为调试。日志调试的输出信息
(undefined) logError(String message)
//设置级别为错误,
(undefined) logMessage(String message)
//设置级别为信息
(undefined) logWarning(String message)
//设置级别为警告 上面试两个不同的结果类型。能够查看结果。
有关Element 和 ElementArray的介绍
Element是全部控件元素的基类,这些控件的元素包含:Target 和Application这两中相对高级的对象。
空间元素的定位方法:element()方法得到一个元素的子元素数组(Element Array)。数组就好办,依照数组处理就好。
即为:通过:元素——> 元数组——>元素——> 元数组——>元素——> 元数组——>元素——> 元数组——> 这样的递归的方式来定位须要操作的空间。
特殊的:由于一般的程序中的一个窗体值包括一个navigationBar,所以能够通过这种方法Element.navigationBar()直接获取,也能够通过Element.navigationBar()[0]这样的方式获取。
还有tabar也是类似。
(这些都是理论,你能够通过录制能够全然不必要记住这些)
手势识别:
模拟操作的类主要由两类:各自是Element和Target
1、element方式:
1)点击
一个button、一个cell都是会有点击的事件tap(),可是阅读器那就大了,而且位置不同显示的事件也就不同。那么肯定不是一个点击事件那么简单来实现的,所以有了:tapWithOptions(Options);这种方法。假设一次点击不能够满足,能够有相应的方法doubleTap。一个手指不够是吧。能够用twoFingerTap()相应的方法。
2)滑动和拖拽
事实上他们差别不大,仅仅是时间延时上存在差异而已。
滑动实例:Element.flickInsideWithOptions({touchCount:2 ,startOffset:{x:0.5,y:0.9} ,endOffset:{x:1.0 ,y:0.9}});
拖拽实例:Element.dragInsideWithOptions({touchCount:2 ,startOffset:{x:0.5,y:0.9} ,endOffset:{x:1.0 ,y:0.9} , duration:1});
//这个duration 表示的是:手指和屏幕接触的时间。这些參数在官方文档中有。:
duration默认是0。此时它们是等价的。 touchCount表示手指有多少个同一时候參数操作,默觉得1.
2、Target方式
target和Element方式一样提供了两个方法,仅仅是參数不一样而已。
即为:
1、element的范围參数是:0~1
2、UITarget的參数是:详细的数值。
eg:实例
UIATarget.localTarget().tap({x:100 , y:200});
UIATarget.localTarget().tapWithOptions({x:100,y:200},{tapCount:1,touchCount:2 ,duration:1});
由于target是全局对象。所以要传入详细的位置,同一时候还要:点击的次数(tapCount。默认值为:1),点击是手指的个数(touchCount ,默觉得1) 。点击时候接触时间(duration,默认值为0)
相同也有doubleTap和twoFingerTap
滑动和拖拽:
滑动:flickFromTo 拖拽:dragFromToForDuration, 尽管方法名不同,可是使用方法全然同样。
pinch 捏合与缩放,通常是放在图上面
有pinchOpen 和 pinchClose
代码实例:
UIATarget.localTarget().pinchOpenFromToForDuration({x:20 y:200},{x:300 y:200}, 1);
UIATarget.localTarget().pinchCloseFromToForDuration({x:20 y:200},{x:300 y:200}, 1);
总结:1、element和Target是站在两个不同的API描写叙述的,一个是对于控件的元素,一个是对于总体的位置(详细)。结果都是一样的,可能element用的会比較多一点(或许)
3、延时处理:
经典方法:delay(延迟时间);
获取子元素的方法:var elementArray = Element.elements;
存在则高速返回,否则时间消耗长。被超时处理机制处理。且默认的超时为5s。所以会迟延測试的时间。
须要将超时时间设置为更加的短:
UIATarget.localTarget().setTimeout(1);
//即为设置超时为1s。且这样的设置为全局设置,这样存在不灵活的隐患。
var elementArray = Element.elements();
改进的方法:
UIATarget.localTarget().pushTimeOut(1);
var elementArray = Element.elements();
UIATarget.localTarget().popTimeOut(1);
中间的代码被改动为超时1s。其它的代码不会受到影响。
4、Target对象的系统级别的操作,即为:能够提供设备底层的方法。
1、系统信息
Target 对象提供一系列的获取系统信息的方法。
eg:
var Target = UIATarget.localTarget();
UIAlogger.logmessager(target.model());
UIAlogger.logmessager(target.rect().size.width);
UIAlogger.logmessager(target.systemVersion());
2、模拟地址坐标
用于測试尤其是在地图上面的推荐服务等等。
var target = UIATarget.localTarget();
target.setLocation("longitude ":123.3 ,"latitude":23);//获取经纬度设置在这里就好了
3、“摇一摇”之摇晃模拟
我们常常在微信、微博中的摇一摇功能測试
UIATarget.localTarget().shake();
4、锁屏幕和多应用交互模拟
一般我们打开另外一个程序之后。则当前的这个程序就会自己主动进入后台。自己主动測试无法測试后台应用是否正常,我们能够通过推断应用从后台到前台的时候是否正常处理程序。
eg:随意的位置插入代码:
UIATarget.localTarget().lockForDuration(2);//锁屏2秒之后。自己主动恢复
UIATarget.lcoalTarget().deactivateAppForDuration(2);
若是本来正确的程序而如今插入之后不对,那么从后台切换到前台的过程是有问题的。
哎,这漫漫理解吧。没有什么技术含量。
深入了解UIAutomation 的API的更多相关文章
- 2015.4.25利用UIAutomation 替代API函数,解决了ListView无法读数据的难题,顺便实现了鼠标模拟滚轮
UIAutomation比API的优点是类似于消息处理机制,而不是主要靠模拟鼠标键盘发送消息 首先添加引用UIAutomationClient和UIAutomationTypes,在安装.net3.5 ...
- (转载)中文Appium API 文档
该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...
- 中文Appium API 文档
该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...
- appium(10)-iOS predictate
iOS predictate It is worth looking at ’-ios uiautomation’ search strategy with Predicates. UIAutomat ...
- 项目搭建(一):windows UIAutomation API 框架
[环境] 操作系统:Windows7 集成环境:Visual Studio2015 编程语言:C# 目标框架:.net framework4.6 1.新建项目 Visual Studio 2015 [ ...
- appium 常用API
''.appium api第二弹 锋利的python,这是初稿,2015/1/5 如有错误的地方,请同学们进行留言,我会及时予以修改,尽量整合一份ok的api 作者:Mads Spiral QQ:79 ...
- 【视频教程】使用UIAutomation开发软件外挂
UIAutomation是.Net 3.5之后提供的“界面自动化测试”技术,本来是给测试人员用的,不过UIAutomation由于也是界面自动操作的技术,比直接使用keybd_event.GetWin ...
- 如何使用UIAutomation进行iOS 自动化测试(Part I)
转自:http://www.cnblogs.com/vowei/archive/2012/08/10/2631949.html 写在前面 研究iOS的自动化测试也有些日子了,刚开始的时候,一直苦于找不 ...
- 手机自动化测试:Appium源码之api(1)
手机自动化测试:Appium源码之api(1) AppiumDriver getAppStrings() 默认系统语言对应的Strings.xml文件内的数据. driver.getAppStri ...
随机推荐
- ElasticSearch 数据类型
1.范围数据类型 支持以下范围类型: integer_range : 一系列带符号的32位整数,最小值为,最大值为 float_range:一系列单精度32位IEEE 754浮点值. long_ran ...
- Spark(一)-- Standalone HA的部署
首先交代一下集群的规模和配置 集群有六台机器,均是VM虚拟机,每台256M的内存(原谅楼主物理机硬件不太给力) 主机名分别是cloud1~cloud6 每台机器上都装有jdk6,和hadoop-2.2 ...
- Java NIO 选择器(Selector)的内部实现(poll epoll)(转)
转自:http://blog.csdn.net/hsuxu/article/details/9876983 之前强调这么多关于linux内核的poll及epoll,无非是想让大家先有个认识: Java ...
- spring常用的一些注解以及注解注入总结
常用的spring注解有如下几种: @Controller@Service@Autowired@RequestMapping@RequestParam@ModelAttribute@Cacheable ...
- Tomcat:IOException while loading persisted sessions: java.io.EOFException 解决
转自:http://www.blogjava.net/apple0668/archive/2007/10/12/152383.html Tomcat启动时如下错误: 严重: IOException w ...
- 为InfiniBand而哭泣
自古就不乏还没有開始就结束的那种精彩.我称之为殉道者.InfiniBand就是当中之中的一个.尽管它有陨落之势,我依旧要为它鼓掌. 假设说以太网旨在将主机联系在一起,那么InfiniBand的初衷就是 ...
- Visual studio C++ 之空控制台工程添加文件并解决头文件包含问题
背景 之前都是用的MFC已搭好框架,今天想自己从零开始完成添加文件,编译,并解决文件包含问题,在此做个记录. 正文 首先创建一个Win32控制台应用程序,不要直接点击完成,而是点击下一步,然后选择空项 ...
- js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
代码如下: /** 音乐播放器 * @param obj 播放器id * @param file 音频文件 mp3: ogg: * @param loop 是否循环 */ function audio ...
- spring中反射机制和注入的使用
http://www.cnblogs.com/andin/archive/2011/04/30/spring.html spring的一大核心概念是注入, 但是,这存在的一个前提就是类是由spring ...
- mysql bin路径下的mysql被杀毒软件查杀后恢复过来也无法启动
mysql服务被杀毒软件干掉之后操作 文件恢复过来后还是无法启动 同事使用杀毒软件之后发现,mysql的服务被干掉了.之后想到了处理办法: mysqld-nt -installnet start my ...