如何获取与标识符匹配的元素数,例如 XCUIQuery 返回的 "fooImage"?
How do I get the number of elements matching an identifier, say "fooImage" returned by an XCUIQuery?
假设我有一个 table,其中包含三个图像,其 accessiblityIdentifier
设置为 "fooImage"。
XCTAssertTrue(table["tableName"].images.count == 3)
可以,但这很糟糕——如果有人添加了另一种图像类型怎么办?我想要标识符 == "fooImage".
的所有图像的计数
XCUIApplication().images["fooImage"].count
是编译失败 Value of type 'XCUIElement' has no member 'count'
。
在 XCUIElementQuery
上使用下标会给你一个 XCUIElement
,它没有 count
属性。你想像这样在 XCUIElementQuery
上使用 count
。
XCUIApplication().images.matching(identifier: "fooImage").count
为了允许 XCUIElement
,它有一个私有 query
getter。由于私有 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
中的代码将编译并具有预期的行为。
假设我有一个 table,其中包含三个图像,其 accessiblityIdentifier
设置为 "fooImage"。
XCTAssertTrue(table["tableName"].images.count == 3)
可以,但这很糟糕——如果有人添加了另一种图像类型怎么办?我想要标识符 == "fooImage".
XCUIApplication().images["fooImage"].count
是编译失败 Value of type 'XCUIElement' has no member 'count'
。
在 XCUIElementQuery
上使用下标会给你一个 XCUIElement
,它没有 count
属性。你想像这样在 XCUIElementQuery
上使用 count
。
XCUIApplication().images.matching(identifier: "fooImage").count
为了允许 XCUIElement
,它有一个私有 query
getter。由于私有 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
中的代码将编译并具有预期的行为。