通过 Xcode UI 测试找到 parent 或兄弟姐妹

Find parent or sibling with Xcode UI testing

我正在使用 UITableViews,我想找到与单元格内的控件或静态文本对应的单元格。

更一般地说,找到任何 parent 或给定元素的同级元素的好方法非常有用。

现在我只是循环遍历单元格,直到找到正确的单元格,我想避免这种情况。我试过使用 app.tables.cells.containingPredicate,但没有成功。

let pred = NSPredicate { (element, bindings: [String : AnyObject]?) -> Bool in
      return element.staticTexts["My Text"].exists
}
let cells = app.tables.cells.containingPredicate(pred)

传递给谓词块的元素是一个没有静态文本的 XCElementSnapshot。

编辑

James 是正确的,containingType:identifier: 方法非常有效。

在swift中是这样的

let cell = app.tables.cells.containingType(.StaticText, identifier: "My Text")

方法签名中的标识符与元素的标识符 属性 不对应,而只是通过括号中的文本访问元素的常规方式。

app.cells.staticTexts["My Text"] 

您是否尝试过使用 containingType 而不是 containingPredicate?它似乎可以准确地为您提供所需的信息。我不太熟悉 Swift,但在 Objective C 中,它看起来像这样:

    [app.cells containingType:XCUIElementTypeStaticText identifier:@"My Text"];

这是我找到的获取同级元素的方法示例。我试图获取基于指定名称元素的价格元素,但我没有可用的 ID。

我有一个 xml 结构大致是这样的:

 <pre><code>Other
                  Other 
                       Cell
                           Other
                           Other
                           StaticText
                           Other
                           StaticText, label: 'Name1'
                           StaticText, label: '.00'
                       Cell
                           Other
                           Other
                           StaticText
                           Other
                           StaticText, label: 'Name2'
                           StaticText, label: '.00' </code></pre>

我想以 'Name1' 或 'Name2' 的价格获取标签文本。

我使用以下方法获取元素: app.cells.containing(nameNSPredicate).children(matching: .staticText).element(matching: priceNSPredicate).firstMatch