ios - 如何访问 XCUITest 导航栏上的右侧项目按钮?

标签 ios xcode-ui-testing xcuitest

我正在为我的 iOS Swift 应用程序编写 UITest 案例。在应用程序中,我以这种方式在导航栏上创建了一个自定义的右键项目按钮:

let barButtonItem = UIBarButtonItem(customView: customView)
navigationItem.rightBarButtonItem = barButtonItem

现在我不知道如何在 XCUITest 中访问这个自定义的右键项目按钮,真的需要一些帮助。提前致谢。

最佳答案

您无法访问 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 将为残障用户朗读,并应包含有用的文本。

关于ios - 如何访问 XCUITest 导航栏上的右侧项目按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54117040/

相关文章:

xcuitest - 如何同时查看 XCUITest 和我的应用程序的 NSLog 输出?

ios - XCUITest ios 12 开关元素值,是否开启?

ios - 将 object_setInstanceVariable() 转换为 ARC?

ios - 为什么这个 Objective-C Block 会泄漏?

ios - 由于一般错误,此时无法处理 lookupSoftwareForBundleId 请求

ios - 让 XCUIElement 为自动化 UITest 执行 3D 触摸?

swift - 如何在给定 XCUITest 中的文本的情况下获取单元格的索引?

ios - DFT 结果使用来自 Swift 的 vDSP 来自实值输入(Surge 实现)

swift - 如何从一个类 xcode uitesting 运行特定测试

xcode-ui-testing - 有人知道Xcode 11 UI测试的测试结果如何吗?