无法在具有相同元素的 viewController 上方的模式上断言元素
Posted
技术标签:
【中文标题】无法在具有相同元素的 viewController 上方的模式上断言元素【英文标题】:Unable to assert an element on modal that's above viewController with the same element 【发布时间】:2019-10-25 13:36:49 【问题描述】:有一些带有一些 HITTABLE 文本“exampleText”的 viewController。当您点击它时,会打开一个带有相同“exampleText”的模式(甚至是两个具有相同静态文本“exampleText”的单元格) 我的意图是通过 countHittableElements 计算那些“exampleTexts”
但问题是我的方法在模态和视图控制器上搜索元素(在该模态下) 因此,如果模态上有 2 个“exampleTexts”并尝试使用 countHittableElements(name:“exampleTexts”),我总是会得到一个额外的 1 个元素并且我的计数失败。
func countHittableElements(name: String) -> Int
return filterHittableElements(name: name).count
func getElements(name: String) -> XCUIElementQuery
let predicate = NSPredicate(format: "label CONTAINS[c] %@", name)
return application.cells.staticTexts.containing(predicate)
func filterHittableElements(name: String) -> [XCUIElement]
let all = getElements(name: name).allElementsBoundByAccessibilityElement
let onlyfilt = all.filter $0.isHittable
return onlyfilt
有没有办法在视图控制器上方打开模式时忽略它?
【问题讨论】:
这是专门用于测试可击中的,还是只是为了可见,甚至加载? 可见或可点击 - 在此特定测试范围内无关紧要 从未尝试过单元测试,但我认为模态的 subViews 数组可以访问?然后您可以按标签过滤,然后按特定文本过滤并计算这些? 【参考方案1】:如果您有权访问您正在测试的应用程序的代码,您可以尝试计算特定表中的这些元素,如下所示(树中的第一个表):
func getElements(name: String) -> XCUIElementQuery
let predicate = NSPredicate(format: "label CONTAINS[c] %@", name)
return application.tables.element(boundBy: 0).cells.staticTexts.containing(predicate)
或
func getElements(name: String) -> XCUIElementQuery
let predicate = NSPredicate(format: "label CONTAINS[c] %@", name)
return application.tables[<table identifier goes here>]cells.staticTexts.containing(predicate)
您可以通过在测试中的某个位置放置一个断点然后在 XCode 控制台中输入来检查 UI 树结构:
po print(XCUIApplication().debugDescription)
【讨论】:
以上是关于无法在具有相同元素的 viewController 上方的模式上断言元素的主要内容,如果未能解决你的问题,请参考以下文章
具有相同操作的所有 viewController 的通用导航栏
从具有相同 ViewController 类的相同情节提要中调用第二个视图
无法使用 mapKit 从 ViewController 将坐标发送到具有委托的另一个 viewController