swift - “未能获得匹配的快照:评估 UI 查询时超时。” 在 XCUITest
问题描述
我正在为其表格视图中包含巨大单元格(~ 1000)的应用程序编写 UI 测试。尝试访问单元格元素将显示以下错误:
无法获取匹配的快照:评估 UI 查询时超时。
场景:
- 如果我试图让细胞计数
XCUIApplication().tables.firstMatch.cells.count
,它会抛出异常 XCUIApplication().debugDescription
第一次打印会打印整个层次结构(不过,打印大约需要 10 秒)- 之后,如果我尝试打印完全相同的行
XCUIApplication().debugDescription
,则会引发异常
我无法检查单元格计数,也无法访问单元格元素。每当我访问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 更改了它与应用程序的交互,因此将此问题作为一个单独的问题发布。
解决方案
答案:
您可以使用
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。
推荐阅读
- javascript - 容器内的行在顶部被遮挡
- javascript - 如何继承Vue.js中的常用方法?
- php - 使用 Laravel bootstrap css 仅设置页面的一部分
- r - 在 R 中解析复杂的日期文本
- python - 有没有办法在 tkinter 中将字符串写成串行
- excel - 如何根据一组单元格是否包含在命名列表中找到的值来有条件地格式化它们?
- javascript - D3“代币”代表不同的值,直观的记数
- ruby-on-rails - 发送电子邮件时的 Net::SMTPAuthenticationError
- flutter - 行中忽略的小部件对齐
- django - “是否有任何存储库或文档,其中包含运行 django oscar 创建的 docker 的说明?”