如何在 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 中访问导航栏上的右键项目按钮?的主要内容,如果未能解决你的问题,请参考以下文章
java - 如何获取Java Swing列表中未选择的右键单击项目?