Xcode UI测试:谓词失败时自动拍摄快照?
问题描述:
无论何时测试失败,Xcode UI测试都会在结果导航器中进行自动截屏以便查看,这非常有用。但是,这不包括因谓词失败而失败的测试。由于谓词通常用于基本检查(例如,如果元素存在或不存在于当前视图中),这是一个巨大的缺点,因为屏幕截图在诊断测试失败时应用程序中发生的情况时很有用。Xcode UI测试:谓词失败时自动拍摄快照?
有谁知道如何强制截图?这是否需要集成Fastlane快照工具?
答
您不必为此整合Fastlane快照。唯一的技巧快照是做给力截图触发此代码:
XCUIDevice.shared().orientation = .unknown
上的快照documentation描述这不会改变UI。
不幸的是,如果您对谓词使用期望,并且将此代码放入处理器关闭waitForExpectations(timeout:handler:)
,我不知道为什么。
要解决这一点,你可以创建自己的XCTestObservation处理程序是这样的:
class MockObserver: NSObject, XCTestObservation {
func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: UInt) {
XCUIDevice.shared().orientation = .unknown
}
}
XCTestObservationCenter.shared().addTestObserver(MockObserver())
你可以把这个代码在任何setUp()
方法或具体test...
方法。
测试输出是一点都不奇怪,因为它会显示“设置设备方位未知”作为内部的错误和实际断言错误,但你将有你的截图:
答
在tearDown
可以检查测试失败(这是有益的,如果你不放弃截图当测试通过。)
if let failureCount = testRun?.failureCount, failureCount > 0 {
takeScreenshot()
}
如果您已经使用XCode9,该takeScreenshot
功能可以使用新的API(如果没有,则使用由对方的回答中提到的解决方法):
let screenshot = XCUIScreen.main.screenshot()
let attach = XCTAttachment(screenshot: screenshot)
add(attach)
您也可以命名的连接,改变它的寿命;)
你有它保存快照的任何想法?像Fastlane快照一样,我可以为此设置路径吗?谢谢。 – Brduca