在 UI 测试期间,如何使用 Xcode 7 截取我的 UI 截图?
Posted
技术标签:
【中文标题】在 UI 测试期间,如何使用 Xcode 7 截取我的 UI 截图?【英文标题】:How do I take screenshots of my UI with Xcode 7 during UI Testing? 【发布时间】:2015-07-15 14:52:24 【问题描述】:所以我下载了 XCode 7 的测试版并创建了一些 UI 测试,但我找不到在测试期间如何截取我的应用程序/UI 屏幕截图的功能。
有人可以帮忙吗?
【问题讨论】:
【参考方案1】:Xcode 中的 UI 测试会在每一步之后自动为您的应用截取屏幕截图。
只需转到已运行的测试之一(报告导航器 > 选择一个测试),然后开始扩展您的测试。当您将鼠标悬停在步骤上时,您会在每个步骤附近看到带有屏幕截图的眼睛图标。
这是一个示例...在这种情况下,请注意灰色行末尾的眼睛图标。如果我点击它,我会在点击我的应用中的按钮时看到应用的屏幕截图(因为步骤是点击“按钮”按钮)。
【讨论】:
这在 XCode 7.1 中有效吗?我看不到同样的东西。同样通过这个过程,XCode 也会对失败的测试用例进行截图? 在 Xcode 7.1 中右键单击测试并选择“跳转到报告”。 有没有办法从测试本身中引用这些屏幕截图?这将使我们能够将操作的结果与期望的结果进行比较。这可能吗? 这些眼睛图标在 Xcode 7.3beta5 (7D162j) 中没有出现。 @LeMotJuiced 这可以用来分析测试结果并找出它失败的原因,但不能用于感知差异测试。截图不可用于测试代码。【参考方案2】:如果要生成截图,也可以使用snapshot,描述了如何在UI测试中触发截图:https://github.com/fastlane/fastlane/tree/master/snapshot#how-does-it-work
它基本上将设备旋转到.Unknown
(Source),这会触发快照而不实际修改应用的状态。
将输出与生成的 plist 文件进行比较,您甚至可以正确命名屏幕截图
【讨论】:
fastlane 快照和交付在生成应用商店屏幕截图时效果很好。但是,我正在寻找一种从快照生成静态网站的解决方案,该快照针对纯粹的 UITests。例如截图批次是根据测试用例+设备+语言分开的。未来我们能否在快照中拥有这样的风味,或者您知道其他选择吗? 你不能使用snapshot
吗?
我可以。当然,我使用的是snapshot
。我只想要一个用于生成的静态网页的不同模板。(基于测试的图像批次分离)我正在处理。我想知道是否有任何可用的东西。【参考方案3】:
Facebook 的 ios-snapshot-test-case 和 KIF 都作为单元测试运行,因此与应用程序处于同一进程中。因此,他们可以直接访问视图并使用renderView:
或snapshotViewAfterScreenUpdates
之类的内容。 Xcode UI 测试在单独的进程中运行,因此无法直接访问视图。
UI Automation,Apple 现已弃用的 javascript UI 测试库,有一个名为captureScreenWithName
的函数。
不幸的是,新的 Xcode UI 测试在其测试库中缺少任何类似的功能,这对我来说似乎是一个明显的遗漏,我鼓励你提交一个雷达,因为截屏是感知差异测试的基础(它听起来你正在尝试做)。我希望(并期望)能够在以后的 Xcode 更新中解决这个缺陷。
与此同时,还有更多创造性的截屏方法。请参阅此堆栈溢出response 以获取涉及在应用程序本身中截取屏幕截图然后将其发送到测试进程的解决方法。
【讨论】:
【参考方案4】:我创建了一个工具,可以保存最后 n 个屏幕截图并生成 JUnit 测试结果报告,从测试日志中解析 TestSummaries plist 文件。 https://github.com/nacuteodor/ProcessTestSummaries
也许,这对你有帮助。
【讨论】:
我可以请你看看How to offer personal open-source libraries?好吗?【参考方案5】:Facebook 的 FBSnapshotTestCase 可以作为替代解决方案:
https://github.com/facebook/ios-snapshot-test-case
【讨论】:
以上是关于在 UI 测试期间,如何使用 Xcode 7 截取我的 UI 截图?的主要内容,如果未能解决你的问题,请参考以下文章
让 powershell 进入 ie 类,并在 ui 测试期间截取 ie 窗口的屏幕截图
使用 Xcode 进行 UI 测试:如何找到没有标题的按钮?