2016-08-23 9 views
0

XCTest UIテストの初心者です。私はXcodeの継続的な統合のためのボットを作成しました。私は並列テストのためにiPhone 4s、5s、6を追加しました。XCTest iPhone 4sデバイスでの継続的な統合の失敗

テストは簡単です。ボタンをクリックすると、 "Hai"のラベルが "Hello"に変わります。私はちょうど最終ラベル値が "Hello"であると主張しました。テストをローカルでXcodeで実行すると、すべてのデバイスで動作します。統合#41の - それはコミットやボットを使用して統合されている場合でも、テストケースは

ボット号([BeginUITests testExample()]でのテストの失敗)ボットを開始するためにあることを示す、唯一のiPhone 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サーバー上のやや遅いことも可能だし、それは一般的に、後のデバイスのシミュレータよりもゆっくりと動作します。

タップが完了した後にビュー階層がサンプリングされる前に操作が完了していないと、ビュー階層が必ずしもタップ後のどの時点でも更新されないため、役立たないでしょう。

これに対処するには、expectを使用します。これにより、アサーションが作成されているビュー階層が各チェックの前に確実にリフレッシュされます。

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

私はexpectationForPredicateも使用しました。しかし、まだ使用していません。次に、XCUIApplication()。launchの後にsetup()メソッドでsleep(3)を追加しました。できます。しかし、それはテストプロセス全体を遅くするでしょう。それが問題だ。 –

関連する問題