为了允许这个XCUIElement
,它有一个私人query
吸气剂。由于私有 API 仅用于 UI 测试(因此不会嵌入到应用程序中),因此不存在被拒绝的风险,但它仍然容易受到内部更改的影响,因此如果您知道这意味着什么,请使用它。
以下扩展可用于添加所需的行为:
extension XCUIElement {
@nonobjc var query: XCUIElementQuery? {
final class QueryGetterHelper { // Used to allow compilation of the `responds(to:)` below
@objc var query: XCUIElementQuery?
}
if !self.responds(to: #selector(getter: QueryGetterHelper.query)) {
XCTFail("Internal interface changed: tests needs updating")
return nil
}
return self.value(forKey: "query") as? XCUIElementQuery
}
@nonobjc var count: Int {
return self.query?.count ?? 0
}
}
如果内部接口发生变化(如果内部query
getter 被重命名),扩展将无法通过测试,从而防止测试在没有解释的情况下突然无法工作(此代码已使用当时可用的最新 Xcode Xcode 10 beta 6 进行了测试)。
添加扩展后,问题中的代码XCUIApplication().images["fooImage"].count
将编译并具有预期的行为。