前言
iOS自动化测试一直不如Android的方便,最近没事看简单看了下,分别基本使用了一下自动化框架Quick和KIF,做一些简单的介绍。
配置
- 必须将Target设置为Unit Test,根据GitHub官方说明
- 查看GitHub的ReadMe,使用Cocoapod进行安装,命令如下(在Debug模式下才生效):
1
pod 'KIF', :configurations => ['Debug’]
- 根据Github ReadMe直接跳到Final Test Target Configurations 进行设置即可,其实如果是创建工程的时候就勾选了单元测试或UI测试,这一步Xcode是帮我们设置好了的
- 接着跳到Use with Swift, ReadMe说需要建立bridge header,来引入KIF.h,我的实践证明是可以直接import KIF的,相反使用bridge header反而找不到KIF库。
- Swift使用KIF需要extension以使用tester和system常用函数,代码如下:更多请其他的操作参考官方GitHub ReadMe
1
2
3
4
5
6
7
8
9extension XCTestCase {
func tester(file : String = #file, _ line : Int = #line) -> KIFUITestActor {
return KIFUITestActor(inFile: file, atLine: line, delegate: self)
}
func system(file : String = #file, _ line : Int = #line) -> KIFSystemTestActor {
return KIFSystemTestActor(inFile: file, atLine: line, delegate: self)
}
}
###accessibilityLabel设置
KIF是通过苹果的辅助功能,即accessibilityLabel进行的TabBarController中的TabBarItem设置accessibilityLabel就是他的Bar Item Title,如图:
其他的原生控件,如果是使用Storyboard或xib的Interface builder,则可以直接添加,如图:
某些控件在Interface Builder中并没有对应设置accessibilityLabel的地方,它可能是隐藏在了苹果辅助功能的API之下,如TableView,如果你要启用它的accessibilityLabel辅助功能,可以通过代码添加,代码如下:
1
2[self.tableView setAccessibilityLabel:@"History List"];
[self.tableView setIsAccessibilityElement:YES];
使用Tip
注意
测试方法以test命名开始,并按照指定排序进行,如test01 —> test02 …
非test开始的命名测试不会走`,适合在自定义方法时使用对于专门为测试服务的accessibilityLabel设置,在代码中使用#ifdef DEBUG … #endif来包裹,因为这些代码对你的APP正常运行没有直接管理,仅为了测试服务
按钮的title、类的title,可以直接做为访问标签
如果UI组件被键盘挡住了,需要先退掉键盘;如果UI组件不在屏幕范围内,不可以访问,但是滚动视图,可以访问,且会出现在可视范围。
无法访问系统自己的弹窗。例如app想定位用户,不能自动点击允许;但是app自己的弹窗,可以操作的
写在结尾
对iOS自动化测试研究不深,平时也很少用到,希望能够有更好的测试框架和更简易的教程出来。
附Demo地址