無論何時測試失敗,Xcode UI測試都會在結果導航器中進行自動截屏以便查看,這非常有用。但是,這不包括因謂詞失敗而失敗的測試。由於謂詞通常用於基本檢查(例如,如果元素存在或不存在於當前視圖中),這是一個巨大的缺點,因爲屏幕截圖在診斷測試失敗時應用程序中發生的情況時很有用。Xcode UI測試:謂詞失敗時自動拍攝快照?
有誰知道如何強制截圖?這是否需要集成Fastlane快照工具?
無論何時測試失敗,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