2016-08-05 6 views
3

私のUITestコードを単純化しようとしています。現時点では、3つのテキストフィールドでそれぞれ8つのテーブル行をチェックするためのコードが数百行あります。これは私が持っているコードの行数を減らすだけでなく、コピー/ペースト/編集プロセスによって引き起こされるエラーを減らします。Swift 3 - 非関数型 'XCUIElement'の値を呼び出すことができません

checkRow関数の3行に "関数型ではない値 'XCUIElement'を呼び出すことができません。

3行の変数 '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を渡すと、Intと解釈されます。それはthisRowに指定したタイプなのでです。

は私の推測では、あなたがUIntにごthisRowパラメータの種類を変更する必要があるということです。

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


または代わりに、同じよう UIntthisRowを変換:

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

仕事をしたこと、ありがとう!私はまだ多くのことを学ぶ必要があります!! –

+3

Swift 4に更新され、コードに変更を加えずに同じエラーが再び発生し始めました。私はUint(xxx)を取り除かなければならなかった。 XCTAssertFalse(app.tables.cells.element(boundBy:thisRow).exists) –

+9

appleのように、Swift 4で署名をUIntからIntに変更しました。 ' – d4Rk

関連する問題