2017-02-27 1 views
1

내 IOS에서 나는 XCUITest을 사용하여 UITests를 구현하고 있습니다. 내가 Swift 2.3을 가졌던 이래로 큰 활약을 보였지만, tap()과 같은 Swift 3 기본 액션으로 앱을 업데이트 한 후에는 더 이상 작동하지 않습니다.Swift 3 업데이트 후 iOS UITests에서 기본 작업을 수행 할 수 없습니다.

그냥 간단한 코드가 더 이상 작동하지 않습니다

XCUIApplication().buttons["orgMenu"].tap() 

버튼의 이름이 올바른지

Assertion Failure: <unknown>:0: UI Testing Failure - Failure getting snapshot Error Domain=XCTestManagerErrorDomain Code=9 "Error -25204 getting snapshot for element <AXUIElement 0x7f8297d15a50> {pid=32375}" UserInfo={NSLocalizedDescription=Error -25204 getting snapshot for element <AXUIElement 0x7f8297d15a50> {pid=32375}} 

를 던졌습니다 : 나는 테스트를 기록하고 위의 버튼 라인을 탭하면 내가 얻는 바로 그 것이다.

어쨌든, 그것을 : 나는 (

let exists = NSPredicate(format: "exists == 1") 
expectation(for: exists, evaluatedWith: XCUIApplication().buttons["orgMenu"], handler: nil 
waitForExpectations(timeout: time, handler: nil) 

을이 프로그래밍 방식으로 브레이크 포인트를 모두 수동으로 시도하고) 그것의 존재를 기다리고 있기 때문에

버튼은보기에 스위프트 3 전에 일했습니다. 아이디어가 있으십니까? 미리 감사드립니다!

+0

이 앱이 충돌하지 않고 동일한 빌드 수동 시뮬레이터에있는 버튼을 눌러 수 있습니까? – Oletha

+0

@Oletha, yes do –

답변

0

해결 방법을 발견 한 이후로 제 질문에 대한 답을 드리겠습니다.

Swift3 이후로 UI 테스트는 loadMore 패턴으로보기를 관리 할 수 ​​없습니다. 내보기에 TableView과 코드 어딘가에 수동으로 loadMore 패턴을 관리하고 테스트에서 버튼을 탭하면 loadMore가 일종의 무한 루프에서 호출되고 그 오버 헤드가 앱의 리소스가되어 테스트가 수행됩니다 실패.

해결 방법 : UI 테스트가 실행중인 경우 loadMore을 비활성화하십시오. 테스트 '설정에서

:

override func setUp() { 
    super.setUp() 
    let app = XCUIApplication() 

    continueAfterFailure = false 
    app.launchEnvironment = ["isUITest":"YES"] 
    app.launch() 
} 

loadData로보기에서 :

-(void)loadMore 
{ 
    if ([Utils isRunningUITest]) { 
     return; 
    } 
    // My actual function. 
} 

및 스위프트와 오브젝티브 C 믹스 내의 Utils

+(BOOL)isRunningUITest { 
    NSDictionary *environment = [[NSProcessInfo processInfo] environment]; 
    return environment[@"isUITest"]; 
} 

죄송합니다, 이것이 누군가에게 도움이되기를 바랍니다.

+0

NSProcessInfo의 환경 등록 정보는 읽기 전용입니다. 이것은 나를 위해 작동하지 않았다. – delta2flat

0

당신은 시도하고 같은 수행 할 수 있습니다

let app = XCUIApplication() 
XCTAssert(app.buttons["orgMenu"].waitForExistence(timeout: 10)) 
app.buttons["orgMenu"].tap()