1

在我的应用程序中,我有两个选项卡按钮,分别是 Tasks 和 Worklist。任务总是被加载。但是 Worklist 按钮是动态的,并且仅在一段时间后才加载。

我想在一段时间后单击任务按钮。即,我需要等待 Worklist 按钮,如果它在一段时间后存在,则单击 Tasks 按钮。此外,如果超时超过并且未加载工作列表按钮,那么我需要单击任务按钮。

我不能使用睡眠。

我可以使用expectationForPredicate 和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 回答