XCUIElementQuery 将匹配自定义类的所有实例
Posted
技术标签:
【中文标题】XCUIElementQuery 将匹配自定义类的所有实例【英文标题】:XCUIElementQuery that will match all instances of a custom class 【发布时间】:2021-09-10 20:24:27 【问题描述】:我用自定义类替换了我的应用程序中的所有UISwitch
实例——我们称之为MySwitch
——因此XCUIElementTypeQueryProvider.switches
查询不包含任何结果。如何创建一个确实 匹配作为MySwitch
实例的所有后代的查询?
理想情况下,我想要的是能够调用someElement.switches
并让它返回UISwitch
和MySwitch
的所有实例,或者调用someElement.mySwitches
并让它返回MySwitch
的所有实例。
【问题讨论】:
【参考方案1】:您需要一种唯一标识您的开关的方法,因为大概它们现在返回为otherElement
,并且对所有这些的查询会返回大量垃圾(取决于您的应用程序)。将mySwitch
的可访问性ID(或任何您想要的)添加到您的交换机,您应该能够使用myElement.otherElements[“mySwitch”]
将它们全部取回。
如果您需要一个同时返回自定义开关(通过标识符找到)和标准开关的查询,您将不得不想出一个复合谓词。我已经猜测了第二个谓词应该是什么(未测试/从未编写过 elementType 谓词,因此您可能需要玩一下),但应该是这样的:
let mySwitchPredicate = NSPredicate(format: "identifier = %@", "mySwitch")
let standardSwitchPredicate = NSPredicate(format: "elementType = %@", ".switch")
let predicate = NSCompoundPredicate(orPredicateWithSubpredicates: [mySwitchPredicate, standardSwitchPredicate])
【讨论】:
感谢您的建议!可访问性标识符方法是我现在正在做的事情,它足以编写我的测试用例,但这不是我正在寻找的解决方案,因为如果我想为特定开关提供唯一标识符,它就会崩溃——比如元素可以通过其唯一标识符找到,但不会提供通用查询。如果这意味着我的问题没有解决方案,正如我严格定义的那样,那么至少我会了解 UI 测试框架可以被推动的极限。 是的,因为您发现非标准组件更难使用。也许您的开关包含在唯一可识别的对象中(例如可以为每个开关添加 ID 的单元格),您可以使用这些对象找到它们?以上是关于XCUIElementQuery 将匹配自定义类的所有实例的主要内容,如果未能解决你的问题,请参考以下文章
如何将expectationForPredicate 与XCUIElementQuery UISwitch 一起使用
Xcode 7 UI 测试 XCUIElementQuery 随机未正确更新