Error handling UI测试失败,出现错误“0”;未能在15.0s内获取快照”;

Error handling UI测试失败,出现错误“0”;未能在15.0s内获取快照”;,error-handling,xctest,snapshot,xcode-ui-testing,Error Handling,Xctest,Snapshot,Xcode Ui Testing,我有一个包含大量单元格的表格视图。我尝试从此表视图中点击特定单元格。但测试以以下错误结束: 未能在15.0s内获取快照 我假设,系统将在访问整个表视图的元素之前对其进行快照。由于单元数量巨大,拍摄快照的时间不够(15秒可能是系统默认时间) 我手动设置睡眠时间/(我设置60秒)。60秒后我仍然无法进入电池 我发现一件奇怪的事情是,在访问单元格之前,我在调试器中打印对象,如下所示: po print XCUIApplication().cells.debugDescription 它显示了一个错误

我有一个包含大量单元格的表格视图。我尝试从此表视图中点击特定单元格。但测试以以下错误结束:

未能在15.0s内获取快照

我假设,系统将在访问整个表视图的元素之前对其进行快照。由于单元数量巨大,拍摄快照的时间不够(15秒可能是系统默认时间)

我手动设置睡眠时间/(我设置60秒)。60秒后我仍然无法进入电池

我发现一件奇怪的事情是,在访问单元格之前,我在调试器中打印对象,如下所示:

po print XCUIApplication().cells.debugDescription
它显示了一个错误,如

未能在15.0s内获取快照

错误:执行被中断,原因:内部ObjC异常断点(-3)

进程已返回到表达式求值之前的状态

如果我使用

po print XCUIApplication().cells.debugDescription
现在,它将在调试器视图中打印tableview中的所有单元格

不知道为什么会这样。有没有人面临过类似的问题?需要帮助

我假设,系统将在访问整个表视图的元素之前对其进行快照

你的假设是正确的,但事实上还有更多。UI测试从应用程序请求快照。应用程序获取此快照,然后将快照发送到测试,测试最终在测试中评估查询。对于非常大的快照(如表视图),这意味着:

  • 快照需要很长时间,应用程序才能生成和保存快照
  • 快照需要很长时间才能发送回测试以进行查询评估
  • 我现在在WWDC 2017,关于测试有很多好消息——特别是一些解决您确切问题的事情。我会在这里概述,但你应该去看,跳到时间戳17:10

    第一个改进是远程查询。这是测试将查询传输到应用程序的地方,应用程序将从测试远程评估该查询,然后仅传输回该查询的结果。预计此增强功能会有轻微的改善—速度提高约20%,内存减少约30%

    第二个改进是查询分析。此增强功能将通过使用快照的最小属性集来减少快照的大小。这意味着在评估查询时,默认情况下不会获取视图的完整快照。例如,如果要查询点击按钮,快照将仅限于视图中的按钮。这意味着编写不那么模棱两可的查询更为重要。例如,如果要点击导航栏按钮,请在查询中指定它,如
    app.navigationbar.buttons[“a button”]
    。通过此增强,您将看到性能得到更大的提高—速度提高了约50%,内存减少了约35%

    最后也是最值得注意的(也是最危险的)改进是他们所称的第一个Match API。这带来了一些权衡/风险,但提供了最大的性能增益。它提供了一个新的
    .firstMatch
    属性,用于返回XUIElement查询的第一个匹配项。使用
    .firstMatch
    时,不会出现导致测试失败的不明确匹配,因此您可能会对XUIElement评估或执行您不打算执行的操作。预计性能将提高约10倍,而且根本不会出现内存峰值

    所以,为了回答您的问题-更新到Xcode 9、macOS High Sierra和iOS 11。利用
    .firstMatch
    ,您可以使用高度特定的查询,您的快照超时问题应该得到解决。事实上,您遇到的超时问题可能已经通过远程查询和查询分析的总体改进得到了解决,而无需使用
    。firstMatch