Ожидание фокуса с использованием предиката на 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
}

Он работает для большинства атрибутов, таких как "exist == 1", "isSelected == 1", "isHittable == 1" и т. Д. Но я хочу, чтобы был способ проверить фокус, и, похоже, нет условие, которое подтвердит это.

Если честно, я не могу найти способ проверить фокус даже в автозаполнении Xcode. Я нашел документацию для XCUIElementAttributes, интерфейса, который принят классом XCUIElement: https://developer.apple.com/documentation/xctest/xcuielementattributes и в нем говорится о существовании Bool "hasFocus". Но на самом деле он, кажется, не существует вне мира документации.

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

1 ответ

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

extension XCUIElement { 

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

}

Это вернет истину / ложь. Вы можете использовать это так:

if element.hasFocus == false {
    element.tap()
}
Другие вопросы по тегам