google/EarlGrey

View on GitHub
docs/features.md

Summary

Maintainability
Test Coverage
# Features
EarlGrey offers features that make testing your app easier and more effective.


## Synchronization

Typically, you shouldn’t be concerned about synchronization as EarlGrey automatically synchronizes with the
UI, network requests, main [Dispatch Queue](https://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html),
and the main [NSOperationQueue](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSOperationQueue_class/).
To support cases where you want to wait for some event to occur before the next UI interaction happens,
EarlGrey provides Synchronization APIs that allow you to control EarlGrey's synchronization behavior. You can
use these APIs to increase the stability of your tests. EarlGrey current synchronizes with the
following:

App Resource
-------------------------|
Main Dispatch Queues
Main NSOperationQueue
Animations
Gestures
Network
View Controller Appearance / Disappearance
Keyboard Typing
Scrolling
Main Run Loop
Web View

EarlGrey's synchronization works by tracking the states of different resources that can affect the
app's state and performing an action or an assertion only when the app is found to be idle. Based
on the structure of the app, this can affect the performance of the app when tested. EarlGrey
provides different `GREYConfiguration` values for mitigating these effects, such as changing the
maximum animation duration with `kGREYConfigKeyCALayerMaxAnimationDuration`, blacklisting long
network calls with kGREYConfigKeyURLBlacklistRegex or so.

## Visibility Checks<a name="visibility-checks"></a>

EarlGrey uses screenshot differential comparison (also known as 'screenshot diffs') to determine the
visibility of UI elements before interacting with them. As a result, you can be certain that a user can see
and interact with the UI that EarlGrey interacts with.

Note: Out-of-process (i.e. system generated) alert views and other modal dialogs that obscure the UI can
interfere with this process.

## User-Like Interaction

Taps and swipes are performed using app-level touch events, instead of using element-level event handlers.
Before every UI interaction, EarlGrey asserts that the elements being interacted with are actually visible
(see [Visibility Checks](#visibility-checks)) and not just present in the view hierarchy. EarlGrey's UI
interactions simulate how a real user would interact with your app's UI, and help you to find and fix the
same bugs that users would encounter in your app.

## Next Steps

* To get started with EarlGrey, see [Install and run](install-and-run.md).
* To learn about the EarlGrey APIs, see [APIs](api.md).
* To learn about known issues with EarlGrey, see [Known Issues](known-issues.md).