Appium Appium 源码分析 (7)-status 模块

易寒 · 2015年05月05日 · 最后由 Monkey 回复于 2015年05月05日 · 774 次阅读
本帖已被设为精华帖!

该模块中定义了 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!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 1 条回复 时间 点赞
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册