UITests:如何通过带有谓词的accessibilityIdentifier 找到UIBarButtonItem?

Posted

技术标签:

【中文标题】UITests:如何通过带有谓词的accessibilityIdentifier 找到UIBarButtonItem?【英文标题】:UITests: How to find UIBarButtonItem by accessibilityIdentifier with predicate? 【发布时间】:2015-08-28 09:37:47 【问题描述】:

这是我在代码中设置它的方式:

let userBarButtonItem = UIBarButtonItem(image: userIcon, 
                                        style: .Plain, 
                                        target: self, 
                                        action: Selector("userButtonTapped:"))
userBarButtonItem.accessibilityIdentifier = "userBarButtonItem"

然后在UITestCase 中我需要使用:

XCUIApplication().otherElements["userBarButtonItem"] //doesnt work, and the reason is:

断言失败:UI 测试失败 - 未找到“userBarButtonItem”其他匹配项

有没有办法例如使用谓词来找到它?

【问题讨论】:

你得到答案了吗? 很遗憾没有,还在寻找答案... 【参考方案1】:

UIBarButtonItem 没有实现UIAccessibilityIdentification,所以设置accessibilityIdentifier 不起作用。

不如试试

userBarButtonItem.accessibilityLabel = "userBarButtonItem"

然后在测试用例中

XCUIApplication().buttons["userBarButtonItem"]

这应该可行。

更新:

现在 UIBarButtonItem 确实符合 UIAccessibilityIdentification,所以所有这些都不需要。

【讨论】:

现在 UIBarButtonItem 确实符合 UIAccessibilityIdentification。 developer.apple.com/reference/uikit/… UIBarButtonItem 确实实现了 UIAccessibilityIdentification,因此您可以从用户定义的运行时属性中添加accessibilityIdentifier。 好吧,developer.apple.com/documentation/uikit/uibarbuttonitem 肯定说如果符合,但在代码中它实际上不符合:( 其实你是对的,accessibilityIdentifier 还是不行,谢谢:)【参考方案2】:

这对我有用:

 self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:UIString(@"Sign In") style:UIBarButtonItemStyleDone target:self action:@selector(submitPressed:)];

 self.navigationItem.rightBarButtonItem.accessibilityLabel = @"registration-submit-button";

然后我通过

找到了
app.navigationBars.buttons["registration-submit-button"]

【讨论】:

以上是关于UITests:如何通过带有谓词的accessibilityIdentifier 找到UIBarButtonItem?的主要内容,如果未能解决你的问题,请参考以下文章

UITests:如何测试标签是不是在更改后包含一些文本?

UITests-如何在 UITests 中获取当前语言

如何在 UITests Target 中使用accessibilityIdentifier 查找UIView

UITests - 如何在UITests中获取当前语言

为啥带有基于谓词的期望的 XCTest 这么慢?

如何在Core Data中使用带有fetchRequest的谓词