首页 > 解决方案 > “未能获得匹配的快照:评估 UI 查询时超时。” 在 XCUITest

问题描述

我正在为其表格视图中包含巨大单元格(~ 1000)的应用程序编写 UI 测试。尝试访问单元格元素将显示以下错误:

无法获取匹配的快照:评估 UI 查询时超时。

场景:

我无法检查单元格计数,也无法访问单元格元素。每当我访问XCUIApplication().

这是预期的行为,所以我想在本地制作数据副本XCUIApplication()并使用本地保存的实例处理我的查询。所以,我尝试了这个:

private lazy var dummyApp: XCUIApplication = {
   return XCUIApplication()
}()

在这里,我使用了一个惰性变量(因为我只想调用XCUIApplication()一次来阻止系统拍摄快照),它返回XCUIApplication()实例并尝试打印单元格计数,例如:

dummyApp.tables.firstMatch.cells.count

这也抛出了同样的错误。

问题:

有没有办法XCUIApplication()用局部变量保存整个结构?或者我可以在访问元素之前停止/扩展快照过程吗?

PS:我使用的是 Xcode 11.3.1。我长期面临这个问题。由于 XCUITest 从 Xcode 9 更改了它与应用程序的交互,因此将此问题作为一个单独的问题发布。

标签: swiftsnapshotevaluationbulkxcuitest

解决方案


答案

您可以使用

let snapshot = app.snapshot()

这为您提供了应用程序以及所有元素和子元素的快照。
https://developer.apple.com/documentation/xctest/xcuielementsnapshot https://developer.apple.com/documentation/xctest/xcuielementattributes


谈论性能。

你的 UITableView 对于像 XCTest(Appium、Katalon Studio 等)这样的黑盒测试框架来说太大了。

如果你想测试它,你应该考虑切换到 EarlGrey 2.0(或其他灰盒框架)。好消息是您可以将 EarlGrey 2.0 与现有的 XCTest 测试一起使用。

您可以在本文https://devexperts.com/blog/ios-ui-testing-frameworks-performance-comparison/中阅读有关测试框架性能的更多信息

PS 这么大的桌子对用户也不利。考虑重新设计你的 UI。


推荐阅读