1.Write, Export, and Import Automation Test Scripts
里面很容易编写自己的脚本工具。在自动化仪表内置的脚本编辑器允许您创建和编辑新的测试脚本在你跟踪文档,以及导入现有的。
(1)创建一个新的脚本
创建一个新的跟踪文档在使用自动化工具分析模板,选择Automation。
(2)点击choose ,会跳到如下图的界面,注意红色框的地方,下面我们将详细讲解每个代表的意思和注意的点,
1.点击红色框的设置
2.在这个脚本区域,点击Add->Creat
3.双击MyScript ,可以重新命名文件的名字。
4.在类型列表的导航栏中,如下图,可以选择脚本,或者直接输入要编写的脚本代码。
窗格底部的细节部分,如下图:
左下角的按钮是使用脚本在选中的应用程序中,保存了配置的文件,包括脚本,无论何时如果想测试APP就可以再次打开它,在这里我们可以进行测试代码的编写或者在右边区域直接导入已经写好的测试代码,正如前面提到的,这些测试代码需要使用JavaScript进行编写,如果你不熟悉或者嫌麻烦,可以使用底部的录制功能,启用录制后你对屏幕的测试操作都会被自动的转为测试代码,非常方便。
测试如果不通过,就会在顶部的时间轴上标红,测试也会自动停止。
从磁盘上输入一个脚本文件。
1.创建一个脚本。
2.单击脚本的内容区域,选择快捷菜单Export, 可以输出当前文件。
3.点击保存,存储到本地。
导入以前的脚本
1.选择自动化分析模板。
2.点击面板的设置按钮。
3.点击Add -> Import
4.引导找到要打开的文件,打开。
手动记录用户界面操作自动化脚本
为了简化脚本开发的成本,允许记录在iOS设备或者模拟器的操作行为,要使用这个功能,创建一个自动化的跟踪文档,然后可以录制在设备上的操作行为,同时输入JavaScript代码。
用户界面操作记录手册
1.创建或者打开一个包含自动化的脚本文件。
2.点击控制面本的设置按钮。
3.从列表中选择脚本。
4.选中你要在编辑的脚本文件。
5.点击文本编辑的录制按钮(下图的中间录制按钮)。
如果选中的目标文件开始运行和脚本状态在更新表明捕捉正在进行中。
6.执行所需的操作在模拟器中。
PS:为了确保准确的捕捉,慢慢进行这些操作,确保每次操作,代码都有更新。
7.点击停止按钮(下图的右侧按钮),文本编辑器停止捕捉行为。
在执行操作中,会自动生成脚本代码,其中包含一些替代的语法,点击箭头会展示全部的代码,或者收齐。
如果在应用程序崩溃的情况下,脚本会被阻塞,直到程序再次运行,脚本才会继续运行。
测试代码的相关简介
1.获取到屏幕的方法如下:
UIAtarget.localTarget().ftontMostApp().mainWindow()
2.view
(1)获取tableView的方法如下:
UIATarget.localTarget().frontMostApp().mainWindow ().tableViews()[0]
(2)获取tableView的第一行
UIATarget.localTarget().frontMostApp().mainWindow ().tableViews()[0].cells()[0]
(3)获取tableView 的label
UIATarget.localTarget().frontMostApp().mainWindow ().tableViews()[0].cells()[0].elements()[“测试2691”];
(4).button的点击事件
例如模拟一个button的点击事件
UIATarget.localTarget().frontMostApp().navigationBar().buttons()["Add"].tap();
(5)文本输入
例如模拟UITextField 的文字输入
var name = “输入”; UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0].setValue(name);
(6)模拟手势操作
1.Taps
UIATarget.localTarget().tap({x:100,y:200});
UIATarget.localTarget().doubleTap({x:100,y:200});
UIATarget.localTarget().twoFingerTap({x:100, y:200});
2.Pinches
//指定pinch在2秒内完成UIATarget.localTarget().pinchOpenFromToForDuration({x:20, y:200}, {x:300, y:200},2);
UIATarget.localTarget().pinchCloseFromToForDuration({x:20, y:200}, {x:300, y:200}, 2);
3.Drag and Flick
UIATarget.localTarget().dragFromToForDuration({x:160, y:200}, {x:160, y:400}, 1);
UIATarget.localTarget().flickFromTo({x:160, y:200}, {x:160, y:400});
写了一个关于创建过程的例子, gif 有点卡,主要的过程就是从首页->访客通行证->创建访客通行证->返回到访客通行证->删除访客通行证->放回到首页.
脚本的代码如下:
var target = UIATarget.localTarget();
target.setDeviceOrientation(UIA_DEVICE_ORIENTATION_PORTRAIT);
target.frontMostApp().mainWindow().collectionViews()[0].dragInsideWithOptions({startOffset:{x:0.47, y:0.76}, endOffset:{x:0.47, y:0.56}});
target.frontMostApp().mainWindow().collectionViews()[0].cells()["访客通行证"].tap();
target.frontMostApp().mainWindow().buttons()["visitors"].tap();
target.frontMostApp().mainWindow().scrollViews()[0].buttons()[0].tap();
target.frontMostApp().mainWindow().pickers()[0].wheels()[0].dragInsideWithOptions({startOffset:{x:0.81, y:0.50}, endOffset:{x:0.80, y:0.31}});
target.frontMostApp().mainWindow().buttons()["确 定"].tap();
target.frontMostApp().mainWindow().scrollViews()[0].textFields()[0].textFields()[0].tap();
target.frontMostApp().keyboard().typeString("r");
target.frontMostApp().mainWindow().scrollViews()[0].textFields()[1].textFields()[0].tap();
target.frontMostApp().keyboard().typeString("15662170832");
target.frontMostApp().mainWindow().scrollViews()[0].textViews()[0].tapWithOptions({tapOffset:{x:0.10, y:0.40}});
target.frontMostApp().keyboard().typeString("Wq");
target.frontMostApp().navigationBar().buttons()["确定"].tap();
target.delay(2);
target.frontMostApp().mainWindow().tableViews()[0].cells()[0].buttons()["delete"].tap();
// Alert detected. Expressions for handling alerts should be moved into the UIATarget.onAlert function definition.
UIATarget.onAlert = function onAlert(alert) {
return true;
}
target.frontMostApp().alert().defaultButton().tap();
target.frontMostApp().navigationBar().leftButton().tap();
参考文章
1.https://developer.apple.com/library/ios/documentation/DeveloperTools/Reference/UIAutomationRef/
2.https://onevcat.com/2015/09/ui-testing/