1. 程式人生 > >Appium原始碼分析(7)-status模組

Appium原始碼分析(7)-status模組

該模組中定義了36種不同的狀態,以及狀態的解釋資訊,還有一個模組方法,這個模組相對簡單

36種狀態

1個json字串定義了36個元素,每一元素代表了一個狀態,每一個狀態有一個名稱,然後對應一個json字串,該json字串中有code值和summary值:code為整形,summary值為string字串。

var codes = {
  Success: {
    code: 0,
    summary: 'The command executed successfully.'
  },
  NoSuchDriver: {
    code: 6,
    summary: 'A session is
either terminated or not started' }, NoSuchElement: { code: 7, summary: 'An element could not be located on the page using the given search parameters.' }, NoSuchFrame: { code: 8, summary: 'A request to switch to a frame could not be satisfied because the frame could not be found.' }, UnknownCommand: { code: 9
, summary: 'The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource.' }, StaleElementReference: { code: 10, summary: 'An element command failed because the referenced element is no longer attached to the DOM.' }, ElementNotVisible: { code: 11
, summary: 'An element command could not be completed because the element is not visible on the page.' }, InvalidElementState: { code: 12, summary: 'An element command could not be completed because the element is in an invalid state (e.g. attempting to click a disabled element).' }, UnknownError: { code: 13, summary: 'An unknown server-side error occurred while processing the command.' }, ElementIsNotSelectable: { code: 15, summary: 'An attempt was made to select an element that cannot be selected.' }, JavaScriptError: { code: 17, summary: 'An error occurred while executing user supplied JavaScript.' }, XPathLookupError: { code: 19, summary: 'An error occurred while searching for an element by XPath.' }, Timeout: { code: 21, summary: 'An operation did not complete before its timeout expired.' }, NoSuchWindow: { code: 23, summary: 'A request to switch to a different window could not be satisfied because the window could not be found.' }, InvalidCookieDomain: { code: 24, summary: 'An illegal attempt was made to set a cookie under a different domain than the current page.' }, UnableToSetCookie: { code: 25, summary: 'A request to set a cookie\'s value could not be satisfied.' }, UnexpectedAlertOpen: { code: 26, summary: 'A modal dialog was open, blocking this operation' }, NoAlertOpenError: { code: 27, summary: 'An attempt was made to operate on a modal dialog when one was not open.' }, ScriptTimeout: { code: 28, summary: 'A script did not complete before its timeout expired.' }, InvalidElementCoordinates: { code: 29, summary: 'The coordinates provided to an interactions operation are invalid.' }, IMENotAvailable: { code: 30, summary: 'IME was not available.' }, IMEEngineActivationFailed: { code: 31, summary: 'An IME engine could not be started.' }, InvalidSelector: { code: 32, summary: 'Argument was an invalid selector (e.g. XPath/CSS).' }, SessionNotCreatedException: { code: 33, summary: 'A new session could not be created.' }, MoveTargetOutOfBounds: { code: 34, summary: 'Target provided for a move action is out of bounds.' }, NoSuchContext: { code: 35, summary: 'No such context found.' } };

一個模組方法

if (typeof module !== "undefined") {
  //首先將codes所指的json字串賦值給模組物件codes(可以供外部呼叫)
  module.exports.codes = codes;
  //然後定義供外部呼叫的函式getSummaryByCode
  module.exports.getSummaryByCode = function (code) {
    //以10進位制來解析code
    code = parseInt(code, 10);
    for (var c in codes) {
      if (typeof codes[c].code !== "undefined" && codes[c].code === code) {
        //根據code值找到對應的summary描述資訊
        return codes[c].summary;
      }
    }
    return 'An error occurred';
  };
}

當其他模組載入status模組的時候,該模組自身會檢查是否已經初始化過了,如果沒有初始化,那就需要執行if方法體的程式碼。if方法就是將儲存36種狀態的json字串串提供給外界,且提供了一個根據code值找到summary值的函式getSummaryByCode。

Done!