我一直使用这种方法找到XCUIElements:
app.staticTexts["Full Label Text"]
但是,如果我只知道部分标签文字怎么办?部分标签文本是动态生成的(例如“Item#1”,“Item#2”等),所以我想通过查找包含部分文本的元素来搜索它(例如,通过“Item”搜索)。有什么方法可以在Swift中执行此操作吗?
答案 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
}