2016-08-23 2 views
0

XCTest UI 테스트를 처음 사용했습니다. Xcode 연속 통합을위한 봇을 만들었습니다. 병렬 테스트를 위해 iPhone 4, 5 및 6을 추가했습니다.XCTest iPhone 4s 장치의 연속 통합 실패

테스트가 간단합니다. 버튼을 클릭하면 "Hai"라벨이 "Hello"로 변경됩니다. 나는 방금 최종 레이블 값이 "안녕하세요"라고 단언했습니다. 테스트를 Xcode에서 로컬로 실행하면 모든 장치에서 작동합니다. 통합 # 41 -가 최선을 다하고 봇을 사용하여 통합되는 때, 테스트 케이스는

봇 문제 ([BeginUITests testExample()]의 테스트 실패) 봇을 시작하기 위해 보여주는 만 아이폰 4S에 대한 실패 봇

어설 시작 : XCTAssertEqual 실패 : ("옵션 ("하이 "참조)") (안녕하세요 "옵션 (" ")"!) 동일하지 않습니다 - 파일 : 시작/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!") 
} 

답변

0

그것은 4S가 로컬 컴퓨터보다 당신의 CI 서버에 약간 느린 가능성, 그리고 그것은 일반적으로 나중에 장치의 시뮬레이터보다 느리게 작동합니다.

퍼팅 sleep(3)은 탭이 완료된 후 뷰 계층 구조가 샘플링되기 전에 작업이 완료되지 않은 경우 뷰 계층 구조가 반드시 탭 이후의 어떤 시점에서 새로 고쳐지지 않아도 도움이되지 않습니다.

이 문제를 해결하기 위해 expectation을 사용하면 각 검사 전에 표식이 만들어진 뷰 계층 구조가 새로 고쳐집니다.

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

나는 expectationForPredicate도 사용했습니다. 그러나 여전히 사용하지 마십시오. 그런 다음 XCUIApplication(). launch 후에 setup() 메서드에서 sleep (3)을 추가했습니다. 그것은 작동합니다. 그러나 전체 테스트 과정이 느려질 것입니다. 그게 문제 야. –