如何使用IOS自动化测试工具UIAutomation

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 = ();
var app = ();
var window = ();

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

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

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

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

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

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

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

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

对控件的操作如下:

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

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

var navBar = ();
().tap()
var tabBar = ();
var selectedTabName = ().name();
if (selectedTabName != "First") {
()["First"].tap();
}

打印调试log的方式如下:

("mainTest");
( "Select the cells" );
("PASS");
("FAIL"); 

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

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

var target = ();
var app = ();
var window = ();
var navBar = ();
();
("mainTest");
( "Select the cells" );
var cells = ()[0].cells();
for (var index in cells) {
//    ()[0].cells()[0].tap();
(cells[index]);
cells[index].tap();
().tap()
}

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

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

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

以上就是如何使用IOS自动化测试工具UIAutomation的详细内容,更多关于IOS自动化测试工具UIAutomation的资料请关注我们其它相关文章!

时间: 2021-04-12

详解使用Xcode7的Instruments检测解决iOS内存泄露(最新)

作为一名iOS开发攻城狮,在苹果没有出ARC(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我们在开发过程中,由于种种原因,还是会出现内存泄露的问题.内存泄露是一个很严重的问题.下面就简单介绍下怎么使用Xcode7自带的Instruments中的Leaks检测我们的程序有没有内存泄露和定位内存泄露的代码.(分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的)

iOS给border设置渐变色的方法实例

前言 本文将从4行代码出发给一个view设置渐变色,分别会谈到几个重要的渐变色相关属性,在使用过程中有几个需要特别关注的点. 给一个view的border设置渐变色是比较高阶的用法,希望本文可以在这个方面帮助到你. 给view设置渐变色 通过4行代码就可以给一个view设置渐变色: let view = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100)) let gradientLayer = CAGradientLaye

如何在 iOS 应用中添加位置信息

最近要在 iOS 应用中添加位置信息, 需要满足的需求如下: 应用在前台时能够获取位置信息: 通过切换. Home 按键将应用切换到后台时,停止获取位置信息: 应用程序在前台运行, 直接锁定屏幕时,能够继续获取位置信息: 接下来逐步实现这三个需求. 获取设备位置信息 在 iOS 上获取位置信息是很容易的, 网上的资料也很多, 我的代码如下: // make sure location service is enabled. if (!CLLocationManager.LocationServi

iOS UIBezierPath实现饼状图

本文实例为大家分享了iOS UIBezierPath实现饼状图的具体代码,供大家参考,具体内容如下 首先看效果图: 代码: #import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN @interface CircleView : UIView @property (nonatomic, copy) NSArray<NSNumber *> *valueArray; @end NS_ASSUME_NONNULL_END // #define S_W

Android和iOS 测试五个最好的开源自动化工具

自动化测试在产品测试上有着非常重要的作用.实现测试自动化有多种积极的方式,包括最大限度地减少测试执行时间:在关键的发布阶段,用更少的时间确保更大的覆盖范围:在产品开发阶段,可靠又重复性地运行以确保没有引进回归问题.最大限度地减少重复性回归测试循环时的人为错误和疏忽的风险. 在市场上有很多可用的工具,开源的或要付费的.虽然付费和开源工具各有利弊,但是后者在自动化测试社区得到了广泛的应用.根据项目需求来选择合适的自动化工具是非常棘手的. 下面介绍5个最佳的iOS和Android开源自动化工具. 1.

详解 iOS 系统中的视图动画

动画为用户界面的状态转换提供了流畅的可视化效果, 在 iOS 中大量使用了动画效果, 包括改变视图位置. 大小. 从可视化树中删除视图, 隐藏视图等. 你可以考虑用动画效果给用户提供反馈或者用来实现有趣的特效. 在 iOS 系统中, Core Animation 提供了内置的动画支持, 创建动画不需要任何绘图的代码, 你要做的只是激发指定的动画, 接下来就交给 Core Animation 来渲染, 总之, 复杂的动画只需要几行代码就可以了. 哪些属性可以添加动画效果 根据 iOS 视图编程指南

iOS实现循环滚动公告栏

本文实例为大家分享了iOS实现循环滚动公告栏的具体代码,供大家参考,具体内容如下 封装了一个继承于UIView的类,如下: #import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN @interface XtayNoticeScrollView : UIView - (instancetype)initWithFrame:(CGRect)frame titleArray:(NSArray<NSString *> *)titleArray; -

iOS tableView多输入框如何获取数据

前言 难得有点空暇的时间,写写文章,一壶小茶,惬意.扯远了,言归正传. 大家在做App开发的时候,肯定遇到过在一个列表中有多个让用户填写资料的情况,类似于这样的界面: iOS 如果一个tableView中有很多的输入框,而且cell是复用的,这个还有个提交功能 我的设计思路是这样的 1.建立一个Model对象,包含要输入的所有字段, 2.在建立一个cell,有个label和textField, 3.在初始化cell的地方,根据不同的indexRow,显示cell上不同的label,例如昵称.邮箱

iOS中从网络获取数据的几种方法的比较

IOS中获取网络数据一般有三种:1.NSURLCondition(已过时) 2.NSURLSession  3.三方库AFNetWorking NSURLSession 是苹果对NSULRCondition的替代品,NSURLSession比NSURLCondition多了 1.可配置的数据信息NSURLSessionConfiguration,NSURLSessionConfiguration使你可以设置你要请求的数据,通常的设置如缓存,也可以使用默认的配置信息defaultCongurati

ios获取数据之encodeURI和decodeURI的实例

在APP开发过程中,免不了要进行ios的数据处理,在ios传递数据的过程中,会出现JSON数据获取不到的情况,这时候就轮到encodeURI 和 decodeURI出马了. 1.encodeURI,decodeURI encodeURI:将字符串作为 URI 进行编码 •不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码( 即:- _ . ! ~ * ' ( ) ). •目的是对 URI 全部的编码,因此对在 URI 中具有特殊含义的 ASCII 标点符号(即:;

IOS 键盘挡住输入框的问题解决办法

IOS 键盘挡住输入框的问题解决办法 在iOS开发发现一个问题,有时输入框位于低出时,当编辑输入时,弹出的键盘会挡住输入框,令用户看不清楚实时的输入情况,使界面交互极度不友好. 经过查资料终于解决了这个问题. 解决思路: 1. 输入框监听UIControlEventEditingDidBegin事件,当用户开始输入时,将整个view上移. 2. 输入框监听UIControlEventEditingDidEnd事件,当用户结束输入时,将整个view下移,恢复到原位置. 输入框监听事件: [text

详解iOS应用开发中Core Data数据存储的使用

1.如果想创建一个带有coreData的程序,要在项目初始化的时候勾选中   2.创建完成之后,会发现在AppDelegate里多出了几个属性,和2个方法 复制代码 代码如下: <span style="font-size:18px;">    @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;  @property (readonly, strong,

iOS实现聊天输入框功能

经常使用微信聊天,没事儿就会想输入框的实现过程,所以抽空,也实现了一个输入框的功能: 经过封装,使用就非常的简单了,在需要的VC中,实现方法如下: - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor colorWithRed:0.92 green:0.92 blue:0.92 alpha:1.00]; self.keyView = [[DKSKeyboardView alloc] init

iOS tableView实现下拉图片放大效果

本文实例为大家分享了iOS实现下拉图片放大效果展示的具体代码,供大家参考,具体内容如下 #import "ViewController.h" #define kScreenbounds [UIScreen mainScreen].bounds #define kScreenWidth [UIScreen mainScreen].bounds.size.width #define kScreenHeight [UIScreen mainScreen].bounds.size.height

iOS tableview实现顶部拉伸效果

本文实例为大家分享了iOS tableview头部拉伸效果展示的具体代码,例如探探个人信息界面拉伸效果,下拉头像放大 代码: // // PersonController.m // Spread // // Created by qiuxuewei on 16/3/21. // Copyright © 2016年 邱学伟. All rights reserved. // #import "PersonController.h" @interface PersonController (

iOS中的地理位置的获取及plist设置方法

1.在前台的时候获取地理位置信息 ios 8/9 在info.plist中配置NSLocationWhenInUseUsageDescription的值,否则上面的方法无效 调用.requestWhenInUseAuthorization()获取前台获取地理位置权限 调用.startUpdatingLocation() 代码示例 class ViewController: UIViewController { lazy var locateM : CLLocationManager = { le

java从命令行获取数据的三种方式代码实例

这篇文章主要介绍了java从命令行获取数据的三种方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种:利用Scanner对象 import java.util.Scanner; public class TestInputOuput { public static void main(String[] args) { System.out.println("请输入:"); Scanner inp = new Scanne

MySQL 随机函数获取数据速度和效率分析

在mysql中带了随机取数据的函数,在mysql中我们会有rand()函数,很多朋友都会直接使用,如果几百条数据肯定没事,如果几万或百万时你会发现,直接使用是错误的.下面我来介绍随机取数据一些优化方法. SELECT * FROM table_name ORDER BY rand() LIMIT 5; rand在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值. mysql> select RAND(); -> 0.