UIAutomation---IOS自动化测试的工具

xcode中自带的Instuments工具可以用来进行APP的自动化测试, 以及用于进行内存泄露, 文件读写操作等的性能分析.

第一部分: 熟悉Instruments的UIAutomation.

首先, 选取xcode->Open Developer Tool->Instruments打开Instruments工具, 然后在左上角可以选取设备及被测APP(如下图):

在这里, 我选取了iPhone 5s的一个模拟器, 以及之前编写的一个简单的知乎日报APP.

刚开始接触UIAutomation的话, 建议选择录制脚本的方式来熟悉该工具的使用. 如下图的底部的三个按钮分别是播放, 录制, 停止.

点击中间的红色按钮开始录制, 录制过程中, 代码框中会实时更新自动化脚本, 点击停止后, 就录制成功了一段自动化测试脚本了. 然后可以点击左边执行即可看到iPhone 5s模拟器中的执行结果了, 跟录制的动作是一致的.

</pre><pre name="code" class="javascript">var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();

可以看出, 使用UIAutomation对IOS的APP进行自动化测试, 使用的是JavaScript语言.

以上的target, app是建立特定的执行环境, 然后通过app.mainWindow()获取APP的UIWindow.

也可以通过var navBar = app.navigationBar()来获取APP的导航栏navigationBar.

使用target.logElementTree()可以建立APP的层级结构树(类似于Android自动化中的getHierarchyView()方法).  一个简单的结构如下:

第二部分: 控件的获取及操作

获取UI控件的方法也非常简便:

var tableViews = window.tableViews() // 可以获取所有的tableView组成的数组.
var cells = tableViews[0].cells() // 则获取到第一个tableView中的所有cell元素.
var textFields = window.textFields()
textFields[0].value() // 获取该textField中的值

其他控件的获取都是类似的方法, 如buttons(), images(), webViews().

对控件的操作如下:

window.textFields()[0].setValue("name"); // 向textField中填充value.
cells[0].tap() // 对某个cell执行tap操作.
target.tap({x: 100, y: 200}); // 通过坐标执行tap操作
target.doubleTap({x: 100, y: 200});
target.twoFingerTap({x: 100, y: 200});
// 缩放
target.pinchOpenFromToForDuration({x:20, y:200}, {x:300, y:200}, 2);
target.pinchCloseFromToForDuration({x:20, y:200}, {x:300, y:200}, 2);
// 拖拽滑动:
target.dragFromToForDuration({x:160, y:200}, {x:160, y:400}, 1);
target.flickFromTo({x:160, y:200}, {x:160, y:400});

导航栏navigationBar与tabBar的获取及操作如下:

var navBar = app.navigationBar();
navBar.leftButton().tap()
var tabBar = app.tabBar();
var selectedTabName = tabBar.selectedButton().name();
if (selectedTabName != "First") {
    tabBar.buttons()["First"].tap();
}

打印调试log的方式如下:

UIALogger.logStart("mainTest");
UIALogger.logMessage( "Select the cells" );
UIALogger.logPass("PASS");
UIALogger.logFail("FAIL"); 

第三部分: 自定义自动化脚本

熟悉了基本的UIAutomation相关的规则之后, 我们就可以来编写自定义的自动化脚本了.

var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
var navBar = app.navigationBar();

target.logElementTree();

UIALogger.logStart("mainTest");
UIALogger.logMessage( "Select the cells" );
var cells = window.tableViews()[0].cells();
for (var index in cells) {
//    window.tableViews()[0].cells()[0].tap();
    UIALogger.logMessage(cells[index]);
    cells[index].tap();
    navBar.leftButton().tap()
}

在这里, 我简单的取出tableView上的所有cell, 并依次点击该cell, 然后跳转至每个cell的详细界面, 最后返回.

log栏里, 会呈现所有的执行结果, 分析起来也是非常方便的.

怎么样, 使用起来是不是蛮简单的. 但是, 在这里, 只是简单总结了Instruments中UIAutomation的基本用法, 真正精髓的东西还要自己去慢慢琢磨.

所有的技术都是易学难精, 大家加油.

时间: 2024-08-29 12:39:48

UIAutomation---IOS自动化测试的工具的相关文章

Appium IOS 自动化测试初探

手机平台的自动化测试工具很多,之前研究过了安卓和苹果的原生自动化测试框架,经一些同事介绍,貌似Appium是个不错的工具. 想记录一下研究的结果,也算是篇干货的文章 在网上也看了一些视频,个人认为这个自动化测试的特点就是 1. 多编程语言支持 相对于传统的IOS UIautomation只能支持js语言,Appium起到了一个翻译的作用,它其实是一个CS架构,服务器和IOS模拟器或真机直接通讯,客户端和服务器之间用HTTP协议进行交互,所以客户端用什么语言其实不重要.下面会有一个python编程

iOS自动化测试的那些干货

如果有测试大佬发现内容不对,欢迎指正,我会及时修改. 大多数的iOS App(没有持续集成)迭代流程是这样的 也就是说,测试是发布之前的最后一道关卡.如果bug不能在测试中发现,那么bug就会抵达用户,所以测试的完整性和可靠性十分重要. 目前,大多数App还停留在人工测试阶段,人工测试投入的成本最低,能够保证核心功能的使用,而且测试人员不需要会写代码. 但是,在很多测试场景下,人工测试的效率太低,容易出错.举两个常见的例子: 一个App的核心功能,在每一次发布版本前的测试必定会跑一遍所有的测试用

ios界面自动化工具--Appium

ios界面自动化工具--Appium Appium是一款开源的移动端自动化测试框架,支持Android和Ios,之前简单介绍过Appium,链接http://www.yeetrack.com/?p=639.最近在做ios的自动化测试,再详细记录一下过程. 安装Appium 既然使用Appium框架,安装肯定是必须的,两种方式源码安装,或者直接安装二进制dmg文件. 源码方式 git clone https://github.com/appium/appium 下载完成后,执行sh reset.s

[转] Google 开源 iOS 应用测试工具:EarlGrey

Google 开源 iOS 应用测试工具:EarlGrey oschina 发布于: 2016年02月18日 (3评) 分享到:  收藏 +53 3月19日,深圳源创会火热报名中,go>>>»   Google于今日宣布了开源的EarlGrey软件,以便开发者更轻松地构建和运行“面向iOS apps源码”的用户界面测试(是的,你没看错!)当前托管于GitHub上.遵从开源Apache授权的EarlGrey,由Objective-C编写而成.不过本次发布的重要性在于,Google也确实用的

iOS第三方库管理工具

作者:彷徨iOS 原文地址1:http://iostree.sinaapp.com/?p=78 原文地址2:http://blog.csdn.net/wzzvictory/article/details/18737437 iOS第三方库管理工具Pods 很多使用第三方库都觉得超爽,可以省略很多代码,大大节省了我们的开发时间,但是,对于很多初学者来说,使用起来超级麻烦,有可能每个第三方库需要的配置步骤都不一样,并且很容易出错.在此我给大家分享一个非常好用的一款工具-Pods,分享之前我在网上查阅了

强大的iOS开发必备工具

做iOS应用开发的,没有这些工具怎么行,强大的iOS开发必备工具!需要的速来拿! 1.ShareSDK 下载链接:http://sharesdk.cn/Download 软件首页:http://sharesdk.cn/ 分类:程序开发 功能强大.简单易用的社会化分享类库:ShareSDK.开发者只需10分钟即可集成到自己的APP中.不仅支持如QQ.微信.新浪微博.腾讯微博.人人网.豆瓣.facebook.twitter等国内外主流社交平台,还有强大的统计分析管理后台,可以实时了解用户.信息流.回

iOS 逆向工程(工具介绍)- 学习整理(转)

一.class-dump 简介:顾名思义,就是用来导出目标对象的class信息的工具,私有方法声明也能导出来. 原理:利用 Objective-C语言的 runtime 特性,将存 在Mach-O 文件中的头文件信息提 出来,并生成对应的 .h 文件. 使用方法:1,下载然后将class-dump 复制到" /usr/bin"目录下.2,执行sudo chmod 777 /usr/bin/class-dump"命令赋予其执行权限.3,class-dump执行: Objecti

iOS开发常用工具类

iOS开发常用工具类(提高开发的工作效率) 前言 作为一个开发者应该学会去整理收集开发常用的工具类,这些复用的工具可以在项目开发中给你很大程度提高你的工作效率.难道你不想早点完成工作,然后出去撩妹.陪女朋友或者回家陪老婆孩子吗?反正我想早点回家??. 一.常用的宏定义 善于利用宏在开发中过程中会减少很多工作量比如定义开发过程中的常用尺寸,这样在后续开发中不用为了改一个相同尺寸而满世界的去找这个尺寸在哪用到了.宏定义用的很广泛,例如屏幕的宽高,网络请求的baseUrl等等下面是自己整理的一些示例:

iOS代码覆盖率测试工具

基于lcov-1.11的:CodeCoverage4iOS 阅读目录 环境准备 Xcode工程配置 构建并安装程序 收集代码覆盖率 过滤结果 合并多个Coverage.info?件?成覆盖率报告: 参考文献 iOS code coverage test tool. 基于lcov-1.11的iOS代码覆盖率测试工具,适用与iOS真机与模拟器. 环境准备 Mac OS X :10.8.5+ 建议10.9 Xcode :5.0+ 建议6.1 回到顶部 Xcode工程配置 拷贝CodeCoverage4

iOS执行时工具-cycript

cycript是大神saurik开发的一个很强大的工具,能够让开发人员在命令行下和应用交互,在执行时查看和改动应用.它确实能够帮助你破解一些应用,但我认为这个工具主要还是用来学习其它应用的设计(主要是UI的设计及实现). 这个工具使用了Objective-C和Javascript的混合模式,能够实时的和应用交互甚至改动应用.它的网址请猛戳这里.在官网上能够下载到完整的软件包.使用的方式有两种,一种是在越狱的设备上通过MobileSubstrate加装,这样能够在全部的应用里使用:还有一种是通过静