Xcode UI 测试的截图文件在哪里?
Where is the screenshot file from Xcode UI Test?
我对如何找到在 UI 测试我的应用程序期间创建的屏幕截图的位置感兴趣。我想了解一下 Fastlane Snapshot 是如何抓取这张截图的。经过几个小时的研究,我找不到这些屏幕截图的位置。
屏幕截图存储在您的派生数据文件夹中。您可以通过转至 Xcode、Window > 项目并单击项目的派生数据路径旁边的小箭头找到它。
从您的项目派生数据文件夹(应该是您的文件夹名称后面有一堆字母),转到 Logs/Test
。
Test 文件夹内将是测试摘要 .plist 文件,其名称中包含 UUID(每个测试一个 运行)和一个名为 Attachments
的文件夹 - 屏幕截图在此处。
如果这些文件夹中的任何一个不存在,请确保您先 运行 测试。
要找出您想要的屏幕截图,您需要深入研究 *_TestSummaries.plist 文件。在 Xcode 中打开它,然后按照测试摘要找到您感兴趣的 SubActivity。一些 SubActivity 没有屏幕截图,并且会将 HasScreenshotData
键设置为 NO
。
当您找到带有屏幕截图数据的 SubActivity 时,将该 SubActivity 的 UUID 与 Attachments
文件夹中屏幕截图的文件名相匹配。
我的屏幕截图位于:/Users/{username}/Library/Developer/Xcode/DerivedData/{project_name}-tywebfjsswmghapfjfbzhuazjf/Logs/Test/Attachments
。
在 .plist 中,我按照以下路径查找事件的屏幕截图数据的详细信息:TestableSummaries > Item 0 > Tests > Item 0 > Subtests > Item 0 > Subtests > Item 0 > ActivitySummaries > Item 1 > SubActivities > Item 0
。
截图可以调用下一个方法
func makeScreenShot() {
let screenshot = XCUIScreen.main.screenshot()
let fullScreenshotAttachment = XCTAttachment(screenshot: screenshot)
fullScreenshotAttachment.lifetime = .keepAlways
add(fullScreenshotAttachment)
}
您可以在 Xcode -> Report navigator -> select your test
中找到屏幕截图
或转到
DerivedData -> ProjectName... -> Logs -> Test -> find .xcresult -> Show Package Contents -> Attachments
#For example
/Users/<mac_name>/Library/Developer/Xcode/DerivedData/<project_name>-<...>/Logs/Test/Test-<target_name>-<...>.xcresult
在 Xcode11 中,.xcresults 文件的内容已更改为不再包含可在 Finder 中浏览的附件文件夹。您仍然可以从测试报告中下载单个附件,如 yoAlex5 的回答所示,但要在不使用 Xcode GUI 的情况下获取附件,您必须使用 Apple 的 xcresulttool 或利用 xcresulttool 的第三方工具,例如 xcparse. See this blog post for more information: https://www.chargepoint.com/engineering/xcparse/
我对如何找到在 UI 测试我的应用程序期间创建的屏幕截图的位置感兴趣。我想了解一下 Fastlane Snapshot 是如何抓取这张截图的。经过几个小时的研究,我找不到这些屏幕截图的位置。
屏幕截图存储在您的派生数据文件夹中。您可以通过转至 Xcode、Window > 项目并单击项目的派生数据路径旁边的小箭头找到它。
从您的项目派生数据文件夹(应该是您的文件夹名称后面有一堆字母),转到 Logs/Test
。
Test 文件夹内将是测试摘要 .plist 文件,其名称中包含 UUID(每个测试一个 运行)和一个名为 Attachments
的文件夹 - 屏幕截图在此处。
如果这些文件夹中的任何一个不存在,请确保您先 运行 测试。
要找出您想要的屏幕截图,您需要深入研究 *_TestSummaries.plist 文件。在 Xcode 中打开它,然后按照测试摘要找到您感兴趣的 SubActivity。一些 SubActivity 没有屏幕截图,并且会将 HasScreenshotData
键设置为 NO
。
当您找到带有屏幕截图数据的 SubActivity 时,将该 SubActivity 的 UUID 与 Attachments
文件夹中屏幕截图的文件名相匹配。
我的屏幕截图位于:/Users/{username}/Library/Developer/Xcode/DerivedData/{project_name}-tywebfjsswmghapfjfbzhuazjf/Logs/Test/Attachments
。
在 .plist 中,我按照以下路径查找事件的屏幕截图数据的详细信息:TestableSummaries > Item 0 > Tests > Item 0 > Subtests > Item 0 > Subtests > Item 0 > ActivitySummaries > Item 1 > SubActivities > Item 0
。
截图可以调用下一个方法
func makeScreenShot() {
let screenshot = XCUIScreen.main.screenshot()
let fullScreenshotAttachment = XCTAttachment(screenshot: screenshot)
fullScreenshotAttachment.lifetime = .keepAlways
add(fullScreenshotAttachment)
}
您可以在 Xcode -> Report navigator -> select your test
或转到
DerivedData -> ProjectName... -> Logs -> Test -> find .xcresult -> Show Package Contents -> Attachments
#For example
/Users/<mac_name>/Library/Developer/Xcode/DerivedData/<project_name>-<...>/Logs/Test/Test-<target_name>-<...>.xcresult
在 Xcode11 中,.xcresults 文件的内容已更改为不再包含可在 Finder 中浏览的附件文件夹。您仍然可以从测试报告中下载单个附件,如 yoAlex5 的回答所示,但要在不使用 Xcode GUI 的情况下获取附件,您必须使用 Apple 的 xcresulttool 或利用 xcresulttool 的第三方工具,例如 xcparse. See this blog post for more information: https://www.chargepoint.com/engineering/xcparse/