Appium原始碼分析(7)-status模組
阿新 • • 發佈:2019-02-06
該模組中定義了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!