Ожидание фокуса с использованием предиката XCUIElement

В настоящее время я использую 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, и в нем говорится о существовании Bool «hasFocus». Но на самом деле кажется, что он не существует вне мира документации.

Я использую Xcode 9.4.1, для записи.


person arvere    schedule 09.10.2018    source источник


Ответы (1)


Вы можете написать расширение для XCUIElement. Что-то типа:

extension XCUIElement { 

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

}

Это вернет true/false. Вы можете использовать его следующим образом:

if element.hasFocus == false {
    element.tap()
}
person Václav    schedule 06.11.2018