使用Xcode UI测试查找父母或兄弟姐妹

时间:2015-12-03 13:52:40

标签: ios swift swift2 xcode-ui-testing

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

2 个答案:

答案 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