首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS UITests -如何获取当前视图中存在的XCUIElement列表

iOS UITests -如何获取当前视图中存在的XCUIElement列表
EN

Stack Overflow用户
提问于 2017-02-28 19:06:45
回答 2查看 3.4K关注 0票数 1

我需要获取当前视图中存在的XCUIElement的列表。例如,

代码语言:javascript
复制
let app = XCUIApplication()
let allElements = app.otherElements.allElementsBoundByIndex

返回xcuielement的完整列表,但我只想获取可命中且存在于当前视图中的元素。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-01 16:54:08

如果需要完整的元素列表,而不仅仅是不包括按钮、标签和其他常见视图类型的otherElements,则必须按元素类型.Any进行筛选。

默认情况下,不存在的元素不会出现在列表中,但您可以使用循环来按hittable进行过滤,以将列表限制为仅显示在屏幕上的那些项目。

代码语言:javascript
复制
let app = XCUIApplication()
let allElements = app.descendantsMatchingType(.Any)
var allHittableElements = [XCUIElement]()
for i in 0..<allElements.count {
    let element = allElements.elementBoundByIndex(i)
    if element.hittable {
        allHittableElements.append(element)
    }
}

这是一个相当缓慢但简单的解决方案。

为了获得更快的解决方案,您可以使XCUIElementQuery符合Collection并使用Collection.filter

票数 6
EN

Stack Overflow用户

发布于 2019-05-13 18:28:37

函数方法(Swift 5.0?)

代码语言:javascript
复制
/**
 * ## Example:
 * hittableElements(query: XCUIApplication().descendants(matching: .any)).count // n
 */
func hittableElements(query: XCUIElementQuery) -> [XCUIElement] {
    return (0..<query.count).indices.map { i in
        let element = query(matching: .any).element(boundBy: i)
        return element.isHittable ? element : nil
    }.compactMap { $0 }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42507065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档