本文章转载于搜狗测试
成长路上的最后一篇,让我们来了解一下苹果官方推荐的自动化框架UIAutomation。
UI Automation
脚本录制
将iPhone连接MAC电脑;
打开Xcode7中的Instruments:Xcode –> Open Developer Tool-Instruments;
在Instruments界面选中Automation,然后点击Choose(或者双击Automation)进入Automation界面;
在Automation界面choose Target选择iPhone5真机和该真机上待测的目标应用。(应用必须是从本机中build到真机中的debug版本,有开发者签名,否则无法使用Automation);
创建测试脚本:在Scripts下的点击Add按钮,选择Create,即可自动创建automation测试脚本(即JavaScript脚本) 。
录制脚本:点击下图中的红色按键,便可以开始录制脚本。
录制脚本虽然方便,但这种脚本是非常不健壮的,也没有结果的判断或是LOG的输出的部分。所以我们经常都还需要手动去编码。
获取控件
首先看看这个程序:
那么UI Automation中有个接口logElementTree()能把这个APP的控件树给打印出来,如下:
UIATarget:你可以把它理解成你的设备
想获得上图中的UIATarget:
UIATarget.localTarget();
想获得上图中的UIAWindow:
UIATarget.localTarget().frontMostApp().mainWindow();
可以这样:
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[0];
这时各位可能就会问了我不能老用顺序来找我需要的对象很多时候他的顺序是不定的。于是还有这样的方式:
UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[0].elements()[“”];
可以通过element的name属性来找到它。每个element一共有4种属性:
(1)name:控件的name和accessibility label一致(但如果没有设置accessibility label的话,就无法访问了)
(2)value:目前的值
(3)elements:子节点们
(4)parent:父节点
执行操作
(1)点击:
appWindow.tabBar().buttons()[“UnitConversion”].tap();
也可以看坐标点来点:
UIATarget.localTarget().tap({x:100,y:200});
(2)双击:
UIATarget.localTarget().doubleTap({x:100,y:200});
(3)缩放:
UIATarget.localTarget().pinchOpenFromToForDuration(({x:20,y:200},{x:300,y:200},2);
UIATarget.localTarget().pinchCloseFromToForDuration(({x:20,y:200},{x:300,y:200},2);
(4)滑动:
UIATarget.localTarget().dragFromToForDuration(({x:160,y:200},{x:160,y:400},1);
UIATarget.localTarget().flickFromTo(({x:160,y:200},{x:160,y:400});
(5)输入:
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0].setValue(recipeName);
验证机制
UIAutomation预设元素的isValid()方法来判断是否成功(方法返回trueorfalse).像这样:
if(cell.isValid()){
UIALogger.logPass(testName);
}
else{
UIALogger.logFail(testName);
}
执行测试
(1) UI界面的方式,跟录制方式类似,Import进脚本后点执行测试即可。
(2) 脚本运行的方式:instruments -t xxx.tracetemplate -w DeviceID appName -e UIASCRIPT testScript.js 其中-t 后面的参数为 Automation.tracetemplate 的路径
每个版本的位置都有所不同,在命令行下使用 instruments -s 命令进行查询