如何在 XCUITest 中访问导航栏上的右键项目按钮?

Posted

技术标签:

【中文标题】如何在 XCUITest 中访问导航栏上的右键项目按钮?【英文标题】:How to access a right item button on navigation bar in XCUITest? 【发布时间】:2019-01-09 19:28:22 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您无法访问 UIBarButtonItem,因为它不是真正的 UIElement(它不是 UIView 子类),但您可能还是想访问右栏按钮项内的 UIButton

有几种方法可以访问按钮,这里有两个想法:

1.查询导航栏第一个按钮

let rightNavBarButton = XCUIApplication().navigationBars.children(matching: .button).firstMatch
XCTAssert(rightNavBarButton.exists)

这样您可以访问UINavigationBar 中的第一个UIButton

这仅适用于导航栏中只有一个按钮的情况。所以当你添加另一个按钮时它会中断。

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 为残障用户朗读,并且应该包含有用的文本。

【讨论】:

还是不行。 XCTAssert(rightNavBarButton.exists) 失败。但无论如何,非常感谢! 你的 customView 是 UIButton 吗? 其实customView是一个UIView,里面包含一个UIImageView来承载一张图片。我将 customView 更改为 UIButton,然后它通过 app.navigationBars["myNavigationBarAccessibilityIdentifier"].buttons.element(boundBy: 0).tap() 工作。谢谢! 我没有将 UIButton 用于 rightBarButtonItem 的 customView 的原因是 UIButton 的 setImage 方法不适用于自定义图像。但那是另一个话题了。【参考方案2】:

您必须为按钮分配一个accessibilityIdentifier

barButtonItem.accessibilityIdentifier = “barButtonItemID”

如果不起作用,请将 IsAccessibilityElement 设置为 YES/true

【讨论】:

以上是关于如何在 XCUITest 中访问导航栏上的右键项目按钮?的主要内容,如果未能解决你的问题,请参考以下文章

不在导航栏上制作栏按钮项目和标题(iOS,Swift)

java - 如何获取Java Swing列表中未选择的右键单击项目?

如何删除和添加导航栏上的“返回按钮”

如何在导航栏上的 UIBarButtonItem 内偏移 UIButton 图像?

如何使用材质角度在导航栏上执行下拉项

如何在导航栏上为单个视图上的不同按钮设置标题?