此时在模拟器上会出现一个覆层,你进入需要测试的应用,鼠标点击相应的控件,如下图所示会看到一些信息,Label是这个控件的id属性,Traits是这个控件的类型,Frame是这个控件的位置以及大小{{36,295},{43,21}},其中第一个位置{36,295}是该控件的左上角的坐标,{43,21}则是这个控件的宽度和高度,通过这两个参数可以算出控件的具体坐标位置。

  2、编写测试用例

var testName = "FirstTest";
UIALogger.logStart(testName);
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
app.logElementTree();
window.tableViews()[0].cells()[0].tap();
target.delay(3);
var date = window.elements()["date"];
UIALogger.logMessage( date );
if (date){
         UIALogger.logPass( testName );
}
else{
         UIALogger.logFail( testName );
}

  上面是使用了UIAutomation自带的一些API完成了一个自动测试用例的编写,包括了元素查找以及断言操作,但是如果你编写多个测试用例的话会发现一些问题,比如一些代码会有重复,用例组织不是很好,断言操作不方便。

  3、tuneup介绍

  下面为大家介绍一个开源的基于UIAutomation扩展的JS库tuneup,这个js扩展库是方便大家来编写测试用例。

  Tuneup开源地址:https://github.com/alexvollmer/tuneup_js

  如何来使用,首先你可以在电脑上新建一个测试用例目录,比如文件夹名称叫Demo,下面可以新建一个lib子文件夹,存放需要用到的一个扩展库,你下载的tuneup目录内容可以都放到lib目录下,在demo文件夹下新建一个测试用例的js文件,测试代码中只需要把tuneup使用import引用进来可以使用了,通过tuneup编写的测试用例如下。

#import "lib/tuneup/tuneup.js" 
var target = UIATarget.localTarget();
var app = target.frontMostApp();
 /* Second是测试用例的注释,可以填写用例的用途,以及编写人等信息 */
test("Second", function(target, app) {
var window = app.mainWindow();
app.logElementTree();
window.tableViews()[0].cells()[0].tap();
var date = window.elements()["date"];
assertNotNull(date,"进入日期详情页面,date属性没找到!"); });

  四、通过命令行运行测试用例

  为了能够实现自动定时运行测试脚本,编写完成的测试用例我们希望是能够通过命令行的方式来启动运行的,那么下面我们介绍一下如何通过命令行来启动运行我们编写好的测试用例。

instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/
AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate
"/Users/ios/Library /Application Support/iPhone Simulator/6.0/Applications/D02EF837-94F7-457A-989A-A654FC034803 /
DemoSBTableViewTest.app"
-e UIASCRIPT /AutoTest/workspace/IosDemo/test.js
-e UIARESULTSPATH /AutoTest/workspace/IosDemo/lib/

  上面是通过命令行来运行测试用例的脚本,

  -t 后面的参数为Automation.tracetemplate的路径,不用修改,Xcode4.5以后的版本路径都是这个,如果是Xcode4.5以前的路径会不一样

  “/User***.app” 这个参数为被测程序的路径,模拟器中安装的应用都可以在本地硬盘中找到

  -e UIASCRIPT 指定执行的js脚本

  -e UIARESULTSPATH 指定输出结果存放的路径

  五、后续基于UIAutomation扩展需要的改进点

  1、输出的用例运行结果存在给定的xml文件中, 后续需要解析xml文件,解析成testng的格式,方便后续和Jenkins等持续集成平台整合

  2、查找定位元素,只能按照控件层级,一级一级往下找,使用起来有些不方便,需要再次封装一下

  3、需要加入外围的一些控制,使整个自动化测试运行完全自动化,另外还需要加入一些失败重跑机制,UI的自动化一般都会存在一些不稳定的因素。