如何通过Swift中的部分标签文本找到XCUIElement搜索?

时间:2018-03-01 09:28:34

标签: ios swift automation xctest xcuitest

我一直使用这种方法找到XCUIElements:

app.staticTexts["Full Label Text"]

但是,如果我只知道部分标签文字怎么办?部分标签文本是动态生成的(例如“Item#1”,“Item#2”等),所以我想通过查找包含部分文本的元素来搜索它(例如,通过“Item”搜索)。有什么方法可以在Swift中执行此操作吗?

2 个答案:

答案 0 :(得分:11)

您可以找到带谓词的元素。使用containing(_ predicate: NSPredicate) -> XCUIElementQuery中的XCUIElementQuery方法。

let predicate = NSPredicate(format: "label CONTAINS[c] 'Item'")
let labels = XCUIApplication().staticTexts.containing(predicate)

答案 1 :(得分:0)

要遵循最佳做法,您应在包含项目的标签上设置辅助功能标识符,并使用它标识这些单元格。

// app code
let label = UILabel!
label.text = "Item 1" // Set text for label(s)
if label.text.contains("Item") {
    label.accessibilityIdentifier = "itemLabel"
}

// test code
let app = XCUIApplication()
let itemTexts = app.staticTexts.matching(identifier: "itemLabel")

优选地,识别包含项目'应该在应用程序的一侧。但是,如果无法做到这一点,您可以在测试中进行过滤。

let app = XCUIApplication()
let texts = app.staticTexts
var items: [XCUIElement] = []
for i in 0..<texts.count {
    let textElement = texts.element(boundBy: i)
    if textElement.label.contains("Item") {
        items.append(textElement)
    }
}
for item in items {
    // do something with each item text
}