【问题标题】:"Failed to get matching snapshots: Timed out while evaluating UI query." in XCUITest“未能获得匹配的快照:评估 UI 查询时超时。”在 XCUITest
【发布时间】:2020-07-30 05:08:36
【问题描述】:

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

未能获得匹配的快照:评估 UI 查询时超时。

场景:

  • 如果我尝试通过 XCUIApplication().tables.firstMatch.cells.count 获取单元格计数,则会引发异常
  • 第一次打印XCUIApplication().debugDescription会打印整个层次结构(不过,打印大约需要 10 秒)
  • 之后,如果我尝试打印完全相同的行 XCUIApplication().debugDescription,则会引发异常

我无法检查单元格计数,也无法访问单元格元素。每当我访问 XCUIApplication() 中的元素时,系统都会尝试评估所有 UI 元素。

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

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

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

dummyApp.tables.firstMatch.cells.count

这也会抛出同样的错误。

问题:

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

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

【问题讨论】:

    标签: swift snapshot evaluation bulk xcuitest


    【解决方案1】:

    回答

    你可以使用

    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/中阅读有关测试框架性能的更多信息

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

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2018-07-17
      相关资源
      最近更新 更多