在XCUIElement上使用谓词等待焦点

时间:2018-10-09 16:57:37

标签: xcode-ui-testing xcuitest

我目前正在使用NSPredicate等待XCUITest元素上的条件,如下所示:

class func waitForCondition(condition: String, element: XCUIElement) -> Bool {
    let predicate = NSPredicate(format: condition)
    let expectation = XCTNSPredicateExpectation(predicate: predicate, object: element)
    let result = XCTWaiter().wait(for: [expectation], timeout: 5)
    return result == .completed
}

它适用于大多数属性,例如“ exists == 1”,“ isSelected == 1”,“ isHittable == 1”等。 但是我想要的是一种检查焦点的方法,似乎没有一种条件可以验证这一点。

说实话,即使在Xcode的自动完成功能中,我也找不到找到焦点的方法。我找到了XCUIElementAttributes的文档,该文档被XCUIElement类采用: https://developer.apple.com/documentation/xctest/xcuielementattributes 它说明了“ hasFocus”布尔的存在。但是它似乎在文档世界之外似乎并不存在。

我使用Xcode 9.4.1作记录。

1 个答案:

答案 0 :(得分:0)

您可以编写XCUIElement的扩展名。像这样:

extension XCUIElement { 

    var hasFocus: Bool {
        return self.value(forKey: "hasKeyboardFocus") as? Bool ?? false
    }

}

这将返回true / false。 您可以像这样使用它:

if element.hasFocus == false {
    element.tap()
}