XCUIApplication().launch() 永远不会完成
Posted
技术标签:
【中文标题】XCUIApplication().launch() 永远不会完成【英文标题】:XCUIApplication().launch() never completes 【发布时间】:2016-02-14 01:18:24 【问题描述】:我第一次尝试为基于沙盒的、基于 NSDocument 的 OSX 应用程序目标运行 UI 测试,我遇到了 Xcode 7.2.1 和 7.3 beta 3 的问题,因此设置阶段的 XCUIApplication().launch()
调用得到了卡住并最终超时并显示以下错误消息,尽管应用程序实际上处于可运行状态并且可以正常记录测试步骤等。
我看到的错误信息如下:
UI Testing Failure - App state is still not running, state = XCApplicationStateNotRunning
我没有以任何方式自定义测试的设置阶段。相关的启动电话如下所示:
let app = XCUIApplication()
app.launch()
有什么想法吗?有没有办法将新状态强制传递给 XCUIApplication 实例,或者发送通知或它在代理应用程序中侦听的任何内容?
我可以看到(并且我自己也评论过)这个开发者论坛帖子关于什么看起来是相同的问题:https://forums.developer.apple.com/thread/30390
注意:我将此报告为 Radar 上的一个错误,并收到了回复,表明其中一个最新的 Xcode 7.3 测试版将修复它。事实上,这个 Xcode 错误已得到修复,并且在使用 Xcode 7.3 运行我的 UI 测试时,至少对于我的应用程序遇到的场景而言,问题不再发生!
【问题讨论】:
我很好奇为什么这个问题被标记为-1而没有解释? 这是一个真正的问题,我也不明白投反对票。 我遇到了同样的问题,但这是因为我的应用是菜单栏应用,所以我必须启用“应用程序是代理 (UIElement)”。我想这不是你的情况,是吗? 谢谢!不,不幸的是,在我的情况下这并不能解决问题,该应用程序是基于 NSDocument 的常规应用程序,具有停靠栏。 【参考方案1】:我也遇到过这个问题,尤其是在使用机器人运行 UI 测试时。由于之前的测试未正确关闭,其他所有测试都会因此错误而失败。
为避免这种情况,请在测试设置阶段添加以下行:
XCUIApplication().terminate()
因此,您的设置函数将类似于以下内容:
override func setUp()
XCUIApplication().terminate()
super.setUp()
continueAfterFailure = false
XCUIApplication().launch()
这有点多余,因为终止命令也在 override func tearDown
函数中,但应确保正确的测试环境。
【讨论】:
我很高兴地报告说,至少在影响我的情况下,Xcode 7.3 最终版现在解决了这个问题,但没有这种解决方法(我之前确认在问题出现时也能解决问题)!以上是关于XCUIApplication().launch() 永远不会完成的主要内容,如果未能解决你的问题,请参考以下文章