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