Я устанавливаю titleView для navigationItem для UIViewController как UISearchBar. Это отлично работает в приложении, но теперь я пытаюсь добавить некоторый UITesting, и когда я ищу элемент с помощью XCUIElementQuery, он возвращает XCUIElement.Type как .other вместо .searchField, что я и ожидаю. Впоследствии мой тест падает, когда я пытаюсь ввести текст в поле, используя XCUIApplication().typeText("abcd"). Вот пример кода:
В контроллере представления:
override func viewDidLoad() {
let searchBar = UISearchBar()
searchBar.isAccessibilityElement = true
searchBar.accessibilityIdentifier = "search-bar"
searchBar.delegate = self.searchViewController
self.navigationItem.titleView = searchBar
}
В UITest:
func testEnterTextInSearchBar() {
let app = XCUIApplication()
let searchBarElement = app.descendants(matching: .any).matching(identifier: "search-bar").firstMatch
searchBarElement.tap()
app.typeText("test")
}
КРУШЕНИЕ!!! потому что он думает, что тип .other, а не .searchField
Ошибка: «Ни элемент, ни какой-либо потомок не имеют фокуса клавиатуры. Элемент: Атрибуты: Другое, 0x608000192f10, черты: 8589934592, идентификатор:« панель поиска »»
Также использование app.keys["x"].tap() работает нормально, пока включена программная клавиатура.
searchBar.isAccessibilityElement = true
это изменение типа доступности на .other вместо .searchField. Удаление этой строки, кажется, решает проблему. - person drew2dev   schedule 29.11.2017