## Mobile JSON Wire Protocol Errors This package exports a number of classes and methods related to Selenium error handling. There are error classes for each Selenium error type (see [here](https://code.google.com/p/selenium/wiki/JsonWireProtocol#Response_Status_Codes), as well as the context errors in the [mobile spec](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md#webviews-and-other-contexts)). These classes, which are constructed with a string message (defaulting to the "Details" below), are available through the `errors` object exported by the module. They are | Code | Class Name | Details | -----|----------------------------------|----------------------------------------------- | | `MJSONWPError`1 | Base class for other errors | 6 | `NoSuchDriverError` | A session is either terminated or not started | 7 | `NoSuchElementError` | An element could not be located on the page using the given search parameters | 8 | `NoSuchFrameError` | A request to switch to a frame could not be satisfied because the frame could not be found | 9 | `UnknownCommandError` | The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource | 10 | `StaleElementReferenceError` | An element command failed because the referenced element is no longer attached to the DOM | 11 | `ElementNotVisibleError` | An element command could not be completed because the element is not visible on the page | 12 | `InvalidElementStateError` | An element command could not be completed because the element is in an invalid state (e.g., attempting to click a disabled element) | 13 | `UnknownError` | An unknown server-side error occurred while processing the command | 405 | `NotYetImplementedError` | The operation requested is not yet implemented by the driver | 405 | `NotImplementedError` | The operation requested will not be implemented by the driver | 15 | `ElementIsNotSelectableError` | An attempt was made to select an element that cannot be selected | 17 | `JavaScriptError` | An error occurred while executing user supplied JavaScript | 19 | `XPathLookupError` | An error occurred while searching for an element by XPath | 21 | `TimeoutError` | An operation did not complete before its timeout expired | 23 | `NoSuchWindowError` | A request to switch to a different window could not be satisfied because the window could not be found | 24 | `InvalidCookieDomainError` | An illegal attempt was made to set a cookie under a different domain than the current page | 25 | `UnableToSetCookieError` | A request to set a cookie's value could not be satisfied | 26 | `UnexpectedAlertOpenError` | A modal dialog was open, blocking this operation | 27 | `NoAlertOpenError` | An attempt was made to operate on a modal dialog when one was not open | 28 | `ScriptTimeoutError` | A script did not complete before its timeout expired | 29 | `InvalidElementCoordinatesError` | The coordinates provided to an interactions operation are invalid | 30 | `IMENotAvailableError` | Input Method Editor was not available | 31 | `IMEEngineActivationFailedError` | An Input Method Editor engine could not be started | 32 | `InvalidSelectorError` | Argument was an invalid selector (e.g., XPath/CSS) | 33 | `SessionNotCreatedError` | A new session could not be created | 34 | `MoveTargetOutOfBoundsError` | Target provided for a move action is out of bounds | 35 | `NoSuchContextError` | Context provided (e.g., `WEBVIEW_42`) does not exist | 36 | `InvalidContextError` | The operation could not be performed in the current context | | | | | `BadParametersError`2 | The parameters specified for the operation are incorrect 1 `MJSONWPError` is the base class for all errors that are part of the Selenium specification (i.e., all errors except `BadParametersError`), and not itself part of that specification. 2 `BadParametersError` is not part of the Selenium specification, but deals with request management. There are, in addition, two helper methods for dealing with errors `isErrorType (err, type)` - checks if the `err` object is a Mobile JSON Wire Protocol error of a particular type - arguments - `err` - the error object to test - `type` - the error class to test against - usage ```js import { errors, isErrorType } from 'appium-base-driver'; try { // do some stuff... } catch (err) { if (isErrorType(err, errors.InvalidCookieDomainError)) { // process... } } ``` `errorFromCode (code, message)` - retrieve the appropriate error for an error code, with the supplied message. - arguments - `code` - the integer error code for a Mobile JSON Wire Protocol error - `message` - the message to be encapsulated in the error - usage ```js import { errors, errorFromCode } from 'appium-base-driver'; let error = errorFromCode(6, 'an error has occurred'); console.log(error instanceof errors.NoSuchDriverError); // => true console.log(error.message === 'an error has occurred'); // => true ```