A common feature of many app platforms is the ability for developers to embed web content inside of the platform-native app frame. This allows developers to leverage web technologies or existing web content for some or all of the app functionality. However, the additional complexity of mixing "modes" within a single application can make it difficult for automation tools that are designed to target the "native" elements and behaviours.
Appium provides a set of APIs for working with different app modes, called "contexts", that Appium drivers can implement if they support automation commands in these different modes. There are three basic commands that Appium has added to the W3C WebDriver spec for this purpose:
|Get a list of the available contexts
Get Current Context
|Get the name of the active context
|Switch into the context with the given
This API is flexible enough to handle a variety of semantic interpretations on the part of the
driver. For example, the XCUITest driver includes two kinds of contexts: the native app context and
any active webviews, as one context per webview. A call to
Get Contexts will return the list of
names, which you as a test author can sift through and use to switch into the appropriate context.
As another example, the Appium Altunity
Plugin introduces the concept of a
context, which encapsulates all the plugin's specific behaviour to ensure that when outside of the
UNITY context, the active driver's usual command implementations are used.
It is important to note that a call to
Get Contexts will always contain at least one context,
conventionally but not necessarily named
NATIVE_APP. This is the default active context.
Depending on the type of context you're in, the operation of the driver might change. The XCUITest driver, when targeting a webview context, will not run its typical routines for finding and interacting with elements. Instead, it will run a different set of routines appropriate to web elements. This might have a variety of consequences, like supporting a different set of locator strategies.
The command names in the table above are generic references to the commands and not code examples. For examples of how to access the Context API in the language-specific client libraries, please visit the documentation for a given library.