Вы не можете получить доступ к UIBarButtonItem
, потому что это не настоящий UIElement (это не UIView
подкласс), но вы все равно, возможно, захотите получить доступ к UIButton
внутри элемента правой панели кнопок.
Есть несколько способов получить доступ к кнопке, вот две идеи:
1. Запрос первой кнопки на панели навигации
let rightNavBarButton = XCUIApplication().navigationBars.children(matching: .button).firstMatch
XCTAssert(rightNavBarButton.exists)
Таким образом, вы получаете доступ к первому UIButton
внутри UINavigationBar
.
Это работает, только если на панели навигации есть только одна кнопка. Так что он сломается, когда вы добавите еще одну кнопку.
2. Используйте идентификатор доступности
Вы можете определить идентификатор доступности для кнопки внутри правой кнопки мыши и использовать ее для доступа к ней во время теста:
В вашем приложении:
let barButtonItem = UIBarButtonItem(customView: customView)
barButtonItem.accessibilityIdentifier = "navbarRightItem"
navigationItem.rightBarButtonItem = barButtonItem
В вашем тесте:
let rightNavBarButton = XCUIApplication().navigationBars.buttons["navbarRightItem"]
XCTAssert(rightNavBarButton.exists)
Просто убедитесь, что вы используете accessibilityIdentifier
, а не accessibilityLabel
. Потому что accessibilityLabel
будет прочитано VoiceOver для пользователей с ограниченными возможностями и должно содержать полезный текст.