私はアプリのテストを書いていて、「View more moreオファー」ボタンを見つける必要があります。ページにはこれらのボタンが複数ありますが、クリックしたいだけです。これを試してみると、「複数の一致が見つかりました」というエラーが表示されます。問題は、どうすればこれを回避できるのかということです。テストでは、「View more more offer」というボタンの1つだけを検索してタップします。
これが私の現在のコードです
let accordianButton = self.app.buttons["View 2 more offers"]
if accordianButton.exists {
accordianButton.tap()
}
sleep(1)
}
一致するボタンが複数あるため、ボタンのクエリにはより複雑な方法を使用する必要があります。
// 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()
}
この問題を解決する方法はいくつかあります。
絶対にボタンが画面の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()
Xcode 9では、この問題を解決するためにfirstMatch
プロパティが導入されています。
app.staticTexts["View 2 more offers"].firstMatch.tap()
matching
を使用し、次にelement
を使用する必要があります。
let predicate = NSPredicate(format: "identifier CONTAINS 'Cat'")
let image = app.images.matching(predicate).element(boundBy: 0)