Xcode 7 UI 测试 XCUIElementQuery 随机未正确更新

Posted

技术标签:

【中文标题】Xcode 7 UI 测试 XCUIElementQuery 随机未正确更新【英文标题】:Xcode 7 UI Testing XCUIElementQuery Randomly Not Updating Properly 【发布时间】:2015-12-01 01:28:10 【问题描述】:

我有一个解除警报的 UI 测试,检查警报是否已解除(如果没有,它会再次尝试解除),然后继续进行其余的测试。

大多数情况下,测试都顺利通过,但有时看似随机(尽管更常见的是在硬件较旧的机器上的模拟器中),测试将执行以下操作:

检查警报 点击关闭警报的按钮 警报被解除 检查警报(并且仍然找到它 - 我已经记录了此时的查询,它确实找到了刚刚解除的相同警报) 尝试点击关闭警报的按钮 抱怨找不到alert而失败

几点说明:

到目前为止,我在使用调试器单步执行测试时还没有观察到这种行为。 在解除警报后强制测试稍等片刻(使用诸如 usleep() 之类的东西)仍然会导致此行为。

为什么在解除警报后查询仍然可以找到警报?为什么这种行为看似随机?

【问题讨论】:

有趣...所以这个问题似乎源于警报与键盘同时显示的事实。我已修改测试以在显示警报之前关闭键盘,并且测试似乎不再失败。 【参考方案1】:

您是否尝试过通过UI Interruption 处理程序与警报交互?

addUIInterruptionMonitorWithDescription("Alert")  (alert) -> Bool in
    alert.buttons["Allow"].tap()
    return true

【讨论】:

这似乎只适用于系统警报 - 有问题的警报是由应用程序创建的。 我刚刚验证这适用于用户创建的UIAlertControllers。您是否确保警报出现之前添加中断处理程序? 嗯。警报是UIAlertView,而不是UIAlertController。我想这可能是一个问题,因为它在技术上已被弃用。 我刚刚在运行 ios 9 的 iPhone 4s 模拟器上使用 UIAlertView 尝试了相同的代码,但它仍然有效。也许您可以将更多代码发布到 gist 和/或我们可以continue this conversation in chat?

以上是关于Xcode 7 UI 测试 XCUIElementQuery 随机未正确更新的主要内容,如果未能解决你的问题,请参考以下文章

Xcode UI 测试无法编辑多个 UITextFields

无法在 Xcode UI 测试中点击表格单元格

运行 Xcode UI 测试时如何禁用自动完成?

当文本字段为空时,如何在 Xcode UI 测试中测试 UITextField?

iOS 从 XCUIElement 获取 UI 元素

Xcode 7 中的 UITest:如何测试键盘布局(keyboardType)