web-dev-qa-db-ja.com

XCUITest複数の一致が見つかりましたエラー

私はアプリのテストを書いていて、「View more moreオファー」ボタンを見つける必要があります。ページにはこれらのボタンが複数ありますが、クリックしたいだけです。これを試してみると、「複数の一致が見つかりました」というエラーが表示されます。問題は、どうすればこれを回避できるのかということです。テストでは、「View more more offer」というボタンの1つだけを検索してタップします。

これが私の現在のコードです

let accordianButton = self.app.buttons["View 2 more offers"]
    if accordianButton.exists {
        accordianButton.tap()
    }
    sleep(1)
}
15
Billy Boyo

一致するボタンが複数あるため、ボタンのクエリにはより複雑な方法を使用する必要があります。

    // We fetch all buttons matching "View 2 more offers" (accordianButtonsQuery is a XCUIElementQuery)
    let accordianButtonsQuery = self.app.buttons.matchingIdentifier("View 2 more offers")
    // If there is at least one
    if accordianButtonsQuery.count > 0 {
        // We take the first one and tap it
        let firstButton = accordianButtonsQuery.elementBoundByIndex(0)
        firstButton.tap()
    }

スウィフト4:

    let accordianButtonsQuery = self.app.buttons.matching(identifier: "View 2 more offers")
    if accordianButtonsQuery.count > 0 {
        let firstButton = accordianButtonsQuery.element(boundBy: 0)
        firstButton.tap()
    }
27
Julien Quere

この問題を解決する方法はいくつかあります。

絶対索引付け

絶対にボタンが画面の2番目のボタンになることがわかっている場合は、インデックスでアクセスできます。

XCUIApplication().buttons.element(boundBy: 1)

ただし、ボタンが画面上で移動したり、他のボタンが追加されたりするたびに、クエリを更新する必要がある場合があります。

アクセシビリティアップデート

製品コードにアクセスできる場合は、ボタンのaccessibilityTitleを変更できます。タイトルテキストよりも具体的なものに変更し、新しいタイトルを使用してテストでボタンにアクセスします。このプロパティはテストのためにのみ表示され、画面を読み取るときにユーザーに提示されません。

より具体的なクエリ

2つのボタンが他のUI要素内にネストされている場合は、より具体的なクエリを作成できます。たとえば、各ボタンがテーブルビューセル内にあるとします。表のセルにアクセシビリティを追加してから、ボタンをクエリできます。

let app = XCUIApplication()
app.cells["First Cell"].buttons["View 2 more offers"].tap()
app.cells["Second Cell"].buttons["View 2 more offers"].tap()
9
Joe Masilotti

Xcode 9では、この問題を解決するためにfirstMatchプロパティが導入されています。

app.staticTexts["View 2 more offers"].firstMatch.tap()
8

matchingを使用し、次にelementを使用する必要があります。

let predicate = NSPredicate(format: "identifier CONTAINS 'Cat'")
let image = app.images.matching(predicate).element(boundBy: 0)
0
onmyway133