等到使用swift和XC Test在屏幕上看不到对象

时间:2016-05-25 20:31:54

标签: swift xctest xcode-ui-testing xctestexpectation

寻找帮助写入方法,等待指定的元素不再出现在页面上。 SWIFT 2.2,XC测试。 至于你看到我在这里和编程中的新手,我们将非常感谢你的帮助。

3 个答案:

答案 0 :(得分:3)

您必须为要测试的条件设置谓词:

let doesNotExistPredicate = NSPredicate(format: "exists == FALSE")

然后在测试用例中为谓词和UI元素创建一个期望:

self.expectationForPredicate(doesNotExistPredicate, evaluatedWithObject: element, handler: nil)

然后等待你的期望(指定一个超时,如果没有达到预期,测试将失败,这里我使用5秒):

self.waitForExpectationsWithTimeout(5.0, handler: nil)

答案 1 :(得分:0)

为此,我在waitForNonExistence(timeout:)上编写了一个超级简单的XCUIElement扩展函数,它镜像了现有的XCUIElement.waitForExistence(timeout:)函数,如下所示:

extension XCUIElement {

    /**
     * Waits the specified amount of time for the element’s `exists` property to become `false`.
     *
     * - Parameter timeout: The amount of time to wait.
     * - Returns: `false` if the timeout expires without the element coming out of existence.
     */
    func waitForNonExistence(timeout: TimeInterval) -> Bool {
    
        let timeStart = Date().timeIntervalSince1970
    
        while (Date().timeIntervalSince1970 <= (timeStart + timeout)) {
            if !exists { return true }
        }
    
        return false
    }
}

答案 2 :(得分:0)

您可以XCUIElement.exists每秒检查元素10秒钟,然后声明该元素。有关ActivityIndi​​cator,请参见以下内容:

public func waitActivityIndicator() {
    var numberTry = 0
    var activityIndicatorNotVisible = false
    while numberTry < 10 {
        if activityIdentifier.exists {
            sleep(1)
            numberTry += 1
        } else {
            activityIndicatorNotVisible = true
            break
        }
    }
    
    XCTAssert(activityIndicatorNotVisible, "Activity indicator is still visible")
}