google/EarlGrey

View on GitHub
docs/examples.md

Summary

Maintainability
Test Coverage
# EarlGrey Usage Examples
Add any example of custom matchers, asserts etc. that you have found very useful in your EarlGrey tests.

Example 1: **Selecting the first match via a custom Swift matcher**

When an application has exact duplicate elements (every attribute is the same,
including their hierarchy), then the correct fix is to update the app to avoid
duplicating the UI. When that's not possible, a workaround is to match on
the first element.

```swift
// Swift Custom Matcher
/**
 *  Example Usage:
 *
 *  EarlGrey.selectElement(with:grey_allOfMatchers([
 *    grey_accessibilityID("some_id"),
 *    grey_interactable(),
 *    grey_firstElement()])).assert(grey_notNil())
 *
 *  Only intended to be used with selectElementWithMatcher.
 */
func grey_firstElement() -> GREYMatcher {
  var firstMatch = true
  let matches: MatchesBlock = { (element: AnyObject!) -> Bool in
    if firstMatch {
      firstMatch = false
      return true
    }

    return false
  }

  let description: DescribeToBlock = { (description: GREYDescription!) -> Void in
    guard let description = description else {
      return
    }
    description.appendText("first match")
  }

  return GREYElementMatcherBlock.init(matchesBlock: matches, descriptionBlock: description)
}
```