1

私のアプリケーションには、Tasks と Worklist という 2 つのタブ ボタンがあります。タスクは常に読み込まれます。しかし、ワークリスト ボタンは動的で、しばらくしてからロードされます。

一定時間後にタスクボタンをクリックしたい。つまり、[ワークリスト] ボタンが表示されるのを待ち、一定時間後にそれが存在する場合は、[タスク] ボタンをクリックする必要があります。また、タイムアウトを超えて Worklist ボタンがロードされていない場合は、Tasks ボタンをクリックする必要があります。

スリープが使えません。

expectedForPredicate と waitForExpectationsWithTimeout を使用できますか。ただし、タイムアウト後に要素が見つからない場合、waitForExpectationsWithTimeout は失敗します。書いても

waitForExpectationsWithTimeout(120) { (error) -> Void in
         click Tasks button
}

これにより、メインスレッドが停止します。

ワークリストがロードされた後にのみ [タスク] ボタンをクリックしたい。ただし、タイムアウト後にワークリストがロードされない場合は、[タスク] ボタンをクリックする必要もあります..

解決策はありますか。どんな助けでも。

4

1 に答える 1

2

これを処理する独自のカスタム メソッドを作成できます。

func waitForElementToExist(
    element: XCUIElement,
    timeout: Int = 20,
    failTestOnFailure: Bool = true)
    -> Bool
{
    var i = 0
    let message = "Timed out while waiting for element: \(element) after \(timeout) seconds"

    while !element.exists {
        sleep(1)
        i += 1

        guard i < timeout else {
            if failTestOnFailure {
                XCTFail(message)
            } else {
                print(message)
            }

            return false
        }
    }

    return true
}

次のようにメソッドを呼び出すことができます。

if waitForElementToExist(taskButton, timeout: 20, failTestOnFailure: false) {
    button.tap()
}

これがうまくいくことを願っています!

于 2016-09-14T17:02:41.380 に答える