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

问题描述 投票:4回答:2

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

app.staticTexts["Full Label Text"]

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

ios swift automation xctest xcuitest
2个回答
8
投票

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

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

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
}
© www.soinside.com 2019 - 2024. All rights reserved.