Swift中如何用单个查询定位多种类型的XCUIElement?
单个查询匹配多种XCUIElement类型的实现方案
你可以通过两种方式实现单个查询匹配多种类型的XCUIElement:
方法一:使用查询合并(推荐)
利用XCUIQuery的union(_:)方法,将不同元素类型的查询合并为一个,再筛选符合标签条件的元素:
func element(withLabelContaining text: String) -> XCUIElement { // 创建针对cell和staticText的条件查询 let cellQuery = app.cells.containing(NSPredicate(format: "label CONTAINS %@", text)) let staticTextQuery = app.staticTexts.containing(NSPredicate(format: "label CONTAINS %@", text)) // 合并两个查询 let combinedQuery = cellQuery.union(staticTextQuery) return combinedQuery.firstMatch }
该方法的优势是查询效率更高,仅针对指定的元素类型进行筛选,无需遍历所有页面元素。
方法二:通过谓词过滤元素类型
使用descendants(matching: .any)获取所有后代元素,再通过谓词同时限制标签内容和元素类型:
func element(withLabelContaining text: String) -> XCUIElement { return app.descendants(matching: .any) .element(matching: NSPredicate(format: """ label CONTAINS %@ AND (elementType == %d OR elementType == %d) """, text, XCUIElementType.cell.rawValue, XCUIElementType.staticText.rawValue)) .firstMatch }
如果需要匹配更多元素类型,只需在谓词中添加OR elementType == %d分支,替换对应XCUIElementType的原始值即可。
内容的提问来源于stack exchange,提问作者jacobcan118
相关产品推荐
相关产品推荐

