我正在使用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)
传递给谓词块的元素是一个没有staticTexts的XCElementSnapshot。
修改
James是正确的,containsType:identifier:方法效果很好。
在swift中,它看起来像这样
let cell = app.tables.cells.containingType(.StaticText, identifier: "My Text")
如果方法签名中的标识符与元素的标识符属性不对应,那么它只是通过括号中的文本访问元素的常规方式。
app.cells.staticTexts["My Text"]
答案 0 :(得分:11)
您是否尝试过使用containingType
代替containingPredicate
?它似乎正好能满足您的需求。我对Swift不太熟悉,但在Objective C中,它看起来像这样:
[app.cells containingType:XCUIElementTypeStaticText identifier:@"My Text"];
答案 1 :(得分:1)
这是我找到的获取兄弟元素的方法的示例。我试图根据没有可用 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