使用Xcode UI测试查找父级或同级



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

更普遍地说,找到给定元素的任何父元素或兄弟元素的好方法是很好的。

现在我只是在单元格中循环,直到找到正确的单元格,我想避免这样做。我试过使用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,它没有staticText。

编辑

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"];

下面是我找到的一个获取兄弟元素的方法的示例。我试图获得一个基于指定名称元素的price元素,而我没有可以使用的ID。

我有一个xml结构或多或少是这样的:

 <pre><code>Other
                  Other 
                       Cell
                           Other
                           Other
                           StaticText
                           Other
                           StaticText, label: 'Name1'
                           StaticText, label: '$5.00'
                       Cell
                           Other
                           Other
                           StaticText
                           Other
                           StaticText, label: 'Name2'
                           StaticText, label: '$2.00' </code></pre>

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

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

最新更新