我正在使用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