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