我正在为一个UIViewController的navigationItem设置titleView为一个UISearchBar。这在应用程序中运行良好,但现在我正在尝试添加一些UITesting,当我通过XCUIElementQuery搜索该元素时,它返回XCUIElement.Type作为.other,而不是我预期的.searchField。随后,当我尝试使用XCUIApplication().typeText("abcd")在字段中输入文本时,我的测试会崩溃。下面是一些示例代码:
在视图控制器中:
在UITest中:
在视图控制器中:
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,标识符:'search-bar'"
只要软件键盘启用,使用app.keys["x"].tap()也可以正常工作。
searchBar.isAccessibilityElement = true
这会将可访问性类型修改为.other而不是.searchField。删除该行似乎可以解决问题。 - drew2dev