2016-08-05 5 views
3

UITest 코드를 단순화하려고합니다. 지금은 세 개의 텍스트 필드가있는 테이블 행을 최대 8 개까지 검사 할 수있는 수백 줄의 코드가 있습니다. 이렇게하면 코드 줄 수가 줄어들뿐만 아니라 복사/붙여 넣기/편집 프로세스로 인한 오류를 줄일 수 있습니다.스위프트 3 - 함수가 아닌 유형 'XCUIElement'의 값을 호출 할 수 없습니다.

checkRow 함수의 세 줄에 "함수 유형이 아닌 'XCUIElement'값을 호출 할 수 없습니다. 오류가 발생합니다.

세 줄의 'thisRow'변수를 정수로 바꾸면 코드가 컴파일됩니다.

전후입니다.

func checkRow(thisRow: Int, thisAward: String, thisPoints: String, thisDefeated: String) { 
    XCTAssert(app.tables.cells.element(boundBy: thisRow).staticTexts[thisAward].exists) 
    XCTAssert(app.tables.cells.element(boundBy: thisRow).staticTexts[thisPoints].exists) 
    XCTAssert(app.tables.cells.element(boundBy: thisRow).staticTexts[thisDefeated].exists) 
} 

func testAkcCh() { 
    navConfig.tap() 
    pickCD.adjust(toPickerWheelValue: "4") 
    pickCB.adjust(toPickerWheelValue: "5") 
    pickSD.adjust(toPickerWheelValue: "3") 
    pickSB.adjust(toPickerWheelValue: "2") 
    XCTAssert(app.tables.cells.count == 8) 
    checkRow(0, "Best of Breed", p5, d13) 
    checkRow(1, "Best of Opposite Sex", p5, d06) 
} 

이 컴파일하지만 이익의 대부분을 패배로

func testAkcCh() { 
    navConfig.tap() 
    pickCD.adjust(toPickerWheelValue: "4") 
    pickCB.adjust(toPickerWheelValue: "5") 
    pickSD.adjust(toPickerWheelValue: "3") 
    pickSB.adjust(toPickerWheelValue: "2") 
    XCTAssert(app.tables.cells.count == 8) 
    XCTAssert(app.tables.cells.element(boundBy: 0).staticTexts["Best of Breed"].exists) 
    XCTAssert(app.tables.cells.element(boundBy: 0).staticTexts[p5].exists) 
    XCTAssert(app.tables.cells.element(boundBy: 0).staticTexts[d13].exists) 
    XCTAssert(app.tables.cells.element(boundBy: 1).staticTexts["Best of Opposite Sex"].exists) 
    XCTAssert(app.tables.cells.element(boundBy: 1).staticTexts[p5].exists) 
    XCTAssert(app.tables.cells.element(boundBy: 1).staticTexts[d06].exists) 
} 

...

func checkRow(thisRow: Int, thisAward: String, thisPoints: String, thisDefeated: String) { 
    XCTAssert(app.tables.cells.element(boundBy: 0).staticTexts[thisAward].exists) 
    XCTAssert(app.tables.cells.element(boundBy: 0).staticTexts[thisPoints].exists) 
    XCTAssert(app.tables.cells.element(boundBy: 0).staticTexts[thisDefeated].exists) 
} 

답변

6

element(... 함수의 함수 서명 보이는 같은 :

func element(boundBy index: UInt) -> XCUIElement 

공동 mpiler는 0 리터럴을 컨텍스트에 적합한 유형으로 해석합니다. 컨텍스트는 직접 전달할 때 UInt입니다. 그러나 checkRow에 0을 전달할 때 thisRow에 지정한 유형이므로으로 해석합니다. , 일을했던

XCTAssert(app.tables.cells.element(boundBy: UInt(thisRow)).staticTexts[thisAward].exists) 
+0

: 또는

func checkRow(thisRow: UInt, thisAward: String, thisPoints: String, thisDefeated: String) { 


또는를 같이 UIntthisRow 변환 :

내 생각 엔 당신이 UIntthisRow 매개 변수의 유형을 변경할 필요가있다 고맙습니다! 나는 아직도 배울 것이 많다 !! –

+3

Swift 4로 업데이트되었고 코드 변경없이 동일한 오류가 다시 발생하기 시작했습니다. Uint (xxx)를 제거해야했습니다. XCTAssertFalse (app.tables.cells.element (boundBy : thisRow) .exists) –

+9

사과처럼 보이며 Swift 4로 'UInt'에서 'Int'로 서명을 변경했습니다. 'func element (boundBy index : Int) -> XCUIElement ' – d4Rk