iPhone 4s 设备中的 XCTest 持续集成失败

Posted

技术标签:

【中文标题】iPhone 4s 设备中的 XCTest 持续集成失败【英文标题】:XCTest Continuous Integration Failure in iPhone 4s device 【发布时间】:2016-08-23 07:53:40 【问题描述】:

我是 XCTest UI 测试的新手。我为 Xcode 持续集成创建了一个机器人。我添加了 iPhone 4s、5s 和 6 进行并行测试。

测试很简单。当我单击一个按钮时,带有“Hai”的标签应更改为“Hello”。我刚刚断言最终的标签值为“Hello”。当我在 Xcode 中本地运行测试时,它适用于所有设备。但是当它使用bot提交和集成时,测试用例仅针对iPhone 4s失败,表明

Begin Bot 的 Bot 问题(测试失败 -[BeginUITests testExample()]) Begin Bot 的集成 #41

断言:XCTAssertEqual 失败:("Optional("Hai")") 不等于 (“可选(“你好!”)“) - 文件: 开始/BeginUITests/BeginUITests.swift:43

我不知道测试失败的原因。我写的测试用例如下图:

func testExample() 
   let app = XCUIApplication()
   let firstLabel = app.staticTexts.elementBoundByIndex(0)
   let button = app.buttons["Button"]
   XCTAssert(button.exists)
   XCTAssert(firstLabel.exists)
   button.tap()
   sleep(3)
   let changedLabel = app.staticTexts.elementBoundByIndex(0)
   XCTAssertEqual(changedLabel.label, "Hello!")

【问题讨论】:

【参考方案1】:

可能你的 CI 服务器上的 4S 比你的本地机器上稍微慢一些,而且它通常比后来的设备的模拟器运行得更慢。

如果在点击完成后对视图层次结构进行采样之前未完成操作,则输入 sleep(3) 将无济于事,因为视图层次结构不一定在点击后的任何时间点刷新。

为了解决这个问题,请使用期望,这将确保断言所针对的视图层次结构将在每次检查之前刷新。

expectationForPredicate(NSPredicate(format: "label == 'Hello!'"), evaluatedWithObject: changedLabel, handler: nil)
waitForExpectationsWithTimeout(5, handler: nil)

【讨论】:

我也使用了expectationForPredicate。但还是没有用。然后我在 XCUIApplication().launch 之后的 setup() 方法中添加了 sleep(3)。有用。但它会减慢整个测试过程。这就是问题所在。

以上是关于iPhone 4s 设备中的 XCTest 持续集成失败的主要内容,如果未能解决你的问题,请参考以下文章

推送通知在 iPhone 3GS 中不起作用。它适用于最新的 IOS 设备,如 iPhone 4、4s、5

iPhone4S 在 Beacon 检测中的奇怪行为

iphone 4s可以连接两个蓝牙4.0设备吗?

如何在不同的设备(iphone 4s/5s/6/iPhone 6s)中获得真实的 image.size?

无法在 iphone 4s 设备上获得推送通知

我可以使用 BLE 将 Iphone 4s 连接到最多 3 个设备(温度传感器)吗