Automation自动化测试IOS设备
来源:互联网 发布:四选一数据选择器分析 编辑:程序博客网 时间:2024/04/30 03:34
摸索Automation有一段时间了,现简要总结如下:
背景:Automation工具为Mac自带工具,位于Instruments中。
使用:通过USB连接Mac与苹果设备,搜索instruments并打开,双击Automation即可打开其图形化界面,于上方选择target(待测应用)后,即可进行脚本录制、编写、调试等。
感觉使用Automation编写脚本时,最纠结的就是元素定位,遇到不规范不严格的开发就更揪心了,脚本编写调试过程中多用app.logElementTree(),分析打印的控件树信息,方便元素定位。返回的元素多为数组,通过下标、名字或其他属性进行定位。
假设:
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
var nvgBar = app.navigationBar();
var tabBar = app.tabBar();
var testApp = app.name();
var commonMsg = "普通信息";
var warningMsg = "警告信息";
var englishOnly = "only input English";
var englishChinessMixed = "mixed 中文输入";
1.消息及执行结果打印——UIALogger
UIALogger.logMessage(commonMsg);
UIALogger.logPass(testApp);
UIALogger.logFail(testApp);
UIALogger.logWarning(warningMsg);
2.文本框输入
app.keyboard().typeString(englishOnly);
window.textFields()[index].setValue(englishChinessMixed);
3.隐藏键盘
app.keyboard().typeString("\n");
app.keyboard().buttons()["搜索"].tap();
4.判断staticText存在与否(不同布局存在差异,以下仅为一种方式)
if (window.elements()["待判断关键字"]) {
UIALogger.logMessage("存在关键字");
} else {
UIALogger.logMessage("不存在关键字");
}
5.tableView关键字判断(不同布局存在差异,以下仅为一种方式)
if(window.tableViews()[0].cells()["关键字"].isVisible()) {
UIALogger.logMessage("存在关键字");
} else {
UIALogger.logMessage("不存在关键字");
}
6.scrollView控件选取(不同布局存在差异,以下仅为一种方式)
window.scrollViews()[0].button()[1].tap()
某些有name属性的element不可见,故不可tap,无name属性的element只能使用index索引,如上的imagebutton,虽其image有
name属性但不可见,故只能选取button进行tap操作
7.navigationBar关键字判断(不同布局存在差异,以下仅为一种方式)
if(nvgBar.staticTexts()["关键字"].isVisible()) {
UIALogger.logMessage("关键字存在");
} else {
UIALogger.logMessage("关键字不存在");
}
注:有时isVisible()不可用,可换用isValid()尝试,虽然有些元素在界面上确实not visible,但是脚本调试可看出isVisible()返回值是true,此种情况可能就是图层覆盖了,可多尝试几种判断方法。
8.tabBar控件选取(不同布局存在差异,以下仅为一种方式)
tabBar.buttons()["关键字"];
9.判断tarBar当前所选控件
var selectedBtn = tabBar.selectedButtons()["关键字"].value();
if (selectedBtn == "关键字") { }
注:有时直接使用上述已定义的nvgBar.***和tabBar.***会出错,换用app.navigationBar().***和app.tabBar().***则正常,尚不明所以……可能还是跟应用不规范有关系。
10.截屏
target.captureScreenWithName("screenshot1.png");
11.旋转
target.setDeviceOrientation(UIA_DEVICE_ORIENTATION_LANDSCAPELEFT);
UIALogger.logMessage("Current orientation is " + app.interfaceOrientation());
target.setDeviceOrientation(UIA_DEVICE_ORIENTATION_PORTRAIT);
UIALogger.logMessage("Current orientation is " + app.interfaceOrientation());
12.后台运行再进入(模拟home键)
target.deactivateAppForDuration(int second);
13.处理提示框
忽略所有提示框:
UIATarget.onAlert = function onAlert(alert) {
var title = alert.name();
UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
return false; // use default handler
}
处理特定提示框,忽略其他提示框:
UIATarget.onAlert = function onAlert(alert) {
var title = alert.name();
UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
if (title == "Add Something") {
return true; // bypass default handler
}
return false; // use default handler
}
除上述基本方法,还可引进tuneup_js.js拥有更多判断方法,如assertTrue(expression, message)
、assertFalse(expression,
message)、
assertEquals(expected, received, message)
等
命令行运行脚本的方法:
(sudo) instruments -w UDID -t/Users/***/**.tracetemplate 应用名 -e UIASCRIPT 脚本路径 -e UIARESULTSPATH 结果路径 -v
说明:
1.网上说不需要sudo,但我的版本一定需要sudo才可用,可能之前的XCode是root安装的。
2.网上看到-t后面的参数只因XCode版本不同而不同,但我在Mac上根本找不到那文件(Automation.tracetemplate),导致一直运行失败,后来该文件是自己使用Automation图形化界面跑一次脚本并保存模板后方才可用。
3.应用名:一般直接写应用名即可,如Test,但有时开发命名不规范导致只写应用名会出现找不到应用的情况,此时跟上后缀.app即可,如Test.app。
4.好处:命令行比图形化界面运行更快速更稳定更高效,唯一不足是打印的控件树没有图形化界面好识别,但我后几次图形化界面总是崩(可能它已经完全被跑崩了……),而命令行还能稳定运行,所以推荐命令行方式。
最后,总结Automation图形化界面的编辑快捷键:
End:Ctrl+E
Home:Ctrl+A
Delete:Ctrl+D
Backspace:Ctrl+H
Copy:Win+C
Paste:Win+V
Cut:Win+X
左移1:Ctrl+B
下移1:Ctrl+N
上移1:Ctrl+P
右移1:Ctrl+F
删除当前行(光标后面数据):Ctrl+K
PgDn:Ctrl+V
Ctrl+Y:恢复粘贴Ctrl+K最后一次删除的数据
tuneup_js.js下载:点击打开链接
苹果官方Automation API:点击打开链接
更多更详细请参考:点击打开链接
- Automation自动化测试IOS设备
- IOS 自动化 2-UI Automation-功能测试
- Instrument-Automation对IOS进行自动化测试(完整版)
- iOS自动化测试之常用UI Automation API
- iOS自动化测试之常用UI Automation API
- IOS 自动化 1-UI Automation
- 基于instruments-Automation的iOS应用UI自动化测试图文攻略
- 基于instruments-Automation的iOS应用UI自动化测试图文攻略(学习)
- 基于instruments-Automation的iOS应用UI自动化测试图文攻略
- 自动化测试提纲(Automation Testing Outline)
- 使用UI Automation实现自动化测试 -1
- 使用UI Automation实现自动化测试 -2
- 使用UI Automation实现自动化测试 -3
- 使用UI Automation实现自动化测试 -4.1
- 基于UI Automation的自动化测试框架
- 使用 UI Automation 实现自动化测试--1
- 使用 UI Automation 实现自动化测试--2
- 使用 UI Automation 实现自动化测试--3
- 关于取消动态节点回发服务器的代码
- Android Service 服务(一)—— Service
- UVA10483 - The Sum Equals the Product(枚举)
- 2014上海书展
- 跟我复习Java基础中的精髓之一
- Automation自动化测试IOS设备
- AtomicIntegerFieldUpdater多线程原子类的使用
- Subsets leetcode
- greenDaoMaster的学习研究
- 黑马程序员 【】java学习之路——重写(Overriding)、重载(Overloading)、多态的简单总结
- VC动态链接库基础
- 黑马程序员-黑马,人生的一个重要转折
- memset的使用注意
- 网络流(好)hdu4183