XCUITest进阶与技巧
1.测试类的基类
创建「XCUITestBase」基于XCTestCase。接下来的UITest用例都基于这个「XCUITestBase」,
可以减少每个用例的代码量,并统一管理setUp和tearDown函数。
基类接下来的TestHomeTab等测试类都继承XCUITestBase。
2.设置用例执行顺序为随机顺序
在图中的下拉列表中找到「Edit Scheme」,在Test栏目中找到如图选项:
勾选第二个「Random execution order」即可。
3.测试外部App
可启动当前模拟器上已安装app用于测试。需指定bundleId
let app = XCUIApplication(bundleIdentifier: "com.apple.mobilesafari")
app.launch()
_ = app.wait(for: .runningForeground, timeout: 30)
4.查看UI元素树
类似于xpath的查看,能够得到UITest中的元素的具体信息:label、ID、frame等
在编写测试用例时,需要查找元素,执行一系列动作,获取元素并断言。根据上述的查找方式,调试起来其实很麻烦。经过多次尝试,找到了一个非常简便的测试办法。
首先断点进入任意测试方法内部,然后可在lldb中(断点停留的时候的命令行):
lldbpo app //查看当前view的所有元素结构
po app.buttons["abc"] //查找你想要的元素
po app.buttons.firstMath.tap() //所执行的动作会即可作用在当前模拟器中,你也可以直接操作模拟器去展现你要的view,在通过lldb去查找元素,调用动作。相当于通过lldb,你可以动态执行测试案例。可以任意操作app,去寻找你想要的元素和动作
这里只需要了解两个lldb命令:
p(print):打印值,比如p app.staticTexts["登录"].exists ,可以得到true/false
po(print object):打印对象。上例中使用的就是po
5.只执行某个用例(比如整体测试的时候失败的用例)
xcodebuild test-without-building \
-workspace PreciousMetals.xcworkspace \
-scheme PreciousMetalsDevUITests \
-destination 'platform=iOS,name=李鹏SuperXperia' \ //真机-destination表示方法,模拟器是iOS Simulator
-only-testing:PreciousMetalsDevUITests/TestHomeTab //甚至可以继续拼接/+指定的函数名称
name 的取值就是手机真机的设置里面的「关于本机」的名字。
二、Xcodebuild 命令与特性
(待续)
parallel test:多虚拟机测试
编译与test过程分离(一次编译,随时测试)