如何等待一个元素并且在一定时间后没有找到时不会失败 xcuitest

How to Wait for an element and do not fail if not found after a certain time xcuitest

在我的应用程序中,我有两个选项卡按钮,分别是“任务”和“工作列表”。总是加载任务。但是 Worklist 按钮是动态的,只有在一段时间后才会加载。

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

我无法使用睡眠。

我可以使用 expectationForPredicate 和 waitForExpectationsWithTimeout 吗?但是,如果在超时后未找到该元素,waitForExpectationsWithTimeout 将失败。即使我写

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

这导致主线程停顿。

我只想在加载工作列表后单击“任务”按钮。但是如果超时后工作列表没有加载,那么我还需要点击任务按钮..

有什么解决办法吗。任何帮助。

您可以创建自己的自定义方法来处理此问题:

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()
}

希望这对你有用!