【问题标题】:Xcode UI Testing Failure - Computed invalid hit pointXcode UI 测试失败 - 计算的无效命中点
【发布时间】:2017-03-27 02:05:02
【问题描述】:

当测试在 12.9 英寸 iPad Pro 上运行时,我的 Xcode UI 测试代码因此错误而失败。对于所有 iPhone 型号和 iPad Retina,都没有出现错误。

断言失败:EasyTVUITests.m:81:UI 测试失败 - 计算 单元格 0x600000377dc0 的无效生命值(-1.0,-1.3):特征: 8589934592, {{411.0, -1373.0}, {813.3, 106.3}}

失败的测试代码行是这一行:

[[app.tables[@"programs"].cells elementBoundByIndex:17] tap];

错误的实际含义是什么,我该如何调试它?

这是错误的完整运行:

点击单元格

Wait for app to idle

Find the Cell

   Snapshot accessibility hierarchy for com.[hidden]

   Find: Descendants matching type Table

   Find: Elements matching predicate '"programs" IN identifiers'

   Find: Descendants matching type Cell

   Find: Element at index 17

   Wait for app to idle

Synthesise event

   Assertion Failure: EasyTVUITests.m:81: UI Testing Failure - Computed invalid hit point (-1.0, -1.3) for Cell 0x600000377dc0: traits: 8589934592, {{411.0, -1373.0}, {813.3, 106.3}}

索引是 17 并不重要——我只是想随机选择一个单元格。我尝试了另一个索引,但没有任何区别。

从视觉上看,iPad Pro 版本与 iPad Retina 版本没有“错误”或不同。

这是 Xcode 8.1,iPad 模拟器运行 iOS 10.1。

【问题讨论】:

  • 如果有人因为app.buttons["delete"].tap() 不工作而到达这里(就像我一样),您可以将其换成element.typeText(XCUIKeyboardKeyDelete),其中element 是您想要删除键的文本字段或类似字段发送到。

标签: ios objective-c ipad xcode-ui-testing xcode8.1


【解决方案1】:

我在 iPad Pro(12.9 英寸)上遇到了完全相同的问题,而我的代码在 iPad Retina 上运行流畅。

您是否在失败行之前的某处使用XCUIElement's isHittable 测试? 因为出于某种原因,在我的代码中,在 iPad Pro(12.9 英寸)上运行此测试会返回 YES,而在所有其他模拟器上它会返回 NO

我发现它比较了在不同模拟器上运行的控制台输出。 希望对您有所帮助。

【讨论】:

    【解决方案2】:

    错误消息表示您正在尝试在无效坐标处执行点击。在本例中为 (-1.0, -1.3),它位于屏幕左上角的左侧和上方。

    它试图点击的单元格的位置似乎是有效的 - 它的 x 坐标是正数,它的 y 坐标是负数,这表明您想要的单元格在垂直滚动视图中位于屏幕上方。如果是这种情况,并且您可以验证可以手动点击第 17 个单元格,我认为您应该在 bugreport.apple.com 上向 Apple 提交错误。

    【讨论】:

      【解决方案3】:

      我也遇到过这种问题,一个无效的生命值,但是对于一个显示在屏幕上的元素,所以不是滚动问题。

      我设法使用本页 http://samwize.com/2016/02/28/everything-about-xcode-ui-testing-snapshot/ 中描述的强制点击方法为 iPad Retina 和 iPad Pro 9.7 英寸修复了它。

      但它不适用于 12.9 英寸 iPad Pro,因为它的 isHittable 属性为真。

      最后的问题是我试图在显示弹出框时点击主视图上的一个元素,所以虽然它实际上是可点击的,但 xcuitests 认为它​​不是。我现在执行一个虚拟 forceTap 操作以在执行曾经失败的点击操作之前强制关闭弹出框。适用于所有三种 iPad。

      【讨论】:

      • 我知道我的回答不是对这个问题的直接回答,但我认为它可能会帮助一些有无效生命值问题的人。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多