web-dev-qa-db-ja.com

Swiftで部分的なラベルテキストで検索しているXCUIElementを見つけるにはどうすればよいですか?

私はこのメソッドを使用してXCUIElementsを見つけています:

app.staticTexts["Full Label Text"]

しかし、ラベルテキストの一部しか知らない場合はどうなりますか?ラベルテキストの一部は動的に生成されるため(「アイテム#1」、「アイテム#2」など)、テキストの一部を含む要素を見つけて検索したいと思います(「アイテム」による検索など)。 )。 Swiftでこれを行う方法はありますか?

8
C J

述語を持つ要素を見つけることができます。 XCUIElementQuerycontaining(_ predicate: NSPredicate) -> XCUIElementQueryメソッドを使用します。

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

ベストプラクティスに従うには、アイテムを含むラベルにアクセシビリティ識別子を設定し、それを使用してそれらのセルを識別する必要があります。

// 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
}
0
Oletha