日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > Appium Android Bootstrap源碼分析之命令解析執行

Appium Android Bootstrap源碼分析之命令解析執行

來源:程序員人生   發布時間:2014-11-13 08:20:42 閱讀次數:4319次

通過上1篇文章《Appium Android Bootstrap源碼分析之控件AndroidElement》我們知道了Appium從pc端發送過來的命令如果是控件相干的話,終究目標控件在bootstrap中是以AndroidElement對象的方式顯現出來的,并且該控件對象會在AndroidElementHash保護的控件哈希表中保存起來。但是appium觸發1個命令除需要提供是不是與控件相干這個信息外,還需要其他的1些信息,比如,這個是甚么命令?這個就是我們這篇文章需要討論的話題了。

下面我們還是先看1下從pc端發過來的json的格式是怎樣樣的:


可以看到里面除params指定的是哪個控件以外,還指定了另外兩個信息:

  • cmd: 這是1個action還是1個shutdown
  • action:如果是1個action的話,那末是甚么action

開始前我們先扼要描寫下我們需要觸及到幾個關鍵類:

Class

Key Method

Key Member

Parent

Description

Comment

AndroidComma

ndType


enum AndroidCommandType {

ACTION,SHUTDOWN

}


安卓命令的類型,只有兩種,shutdown的處理方式和普通的action會不1樣


AndroidComma

nd

action/getElement

JSONObject json;

AndroidCommandType cmdType;


從用戶發過來的json命令信息得到真實的命令


CommandHand

ler

execute



虛擬類,其他真實CommandHandlerclick的父類


AndroidComma

ndExecutor

execute

HashMap<

String, 

CommandHan

dler> map



map是所有的命令字串和真實的CommandHandler的1個映照。

其成員函數execute就是通過字串命令找到map對應的handler然后履行的


getText

execute


CommandHandler

處理獲得指定控件文本信息的類。

真正履行的是傳進來的AndroidCommand對應UiObjectgetText方法

其他clickfind,drag,setText等命令同理


1. Appium命令解析器AndroidCommand

AndroidCommand這個類真實的作用其實就是去把Appium從pc端發送過來的那串json命令解析出來,它具有兩個成員變量:
JSONObject json; AndroidCommandType cmdType;
json就是pc過來的json格式的那串命令,cmdType就是action或shutdown,其實就是用來把這個類假裝成更像個命令類而已,我認為如果不提供這個成員變量而直接修改其getType的實現去解析json字串直接取得對應的AndroidCommandType,然后把這個類的名字改成AndroidCommandParser得了。

那末我們往下看下AndroidCommand究竟是怎樣對客戶端命令進行解析的,它的方法都很短,所以我把它做成1個表,這樣比較清晰點:

        Method

        Return

        Code

        Description

        AndroidCommand

        N/A

        public AndroidCommand(final String jsonStr) throws JSONException, CommandTypeException { json = new JSONObject(jsonStr); setType(json.getString("cmd")); }


        構造函數構造函數,把客戶端過

        來的json格式命

        令保存起來并根

        據命令的cmd

        設置好cmdType

        action()

        String

        public String action() throws JSONException { if (isElementCommand()) { return json.getString("action"). substring(8); } return json.getString("action"); }


        解析出客戶端過

        來的json字串的

        action這個項并

        返回

        commandType()

        AndroidCom

        mandType 

        public AndroidCommandType commandType() { return cmdType; }


        ACTION還是SHUTDOWN

        getDestElement

        AndroidElement

        public AndroidElement getDestElement() throws JSONException { String destElId = (String) params(). get("destElId"); return AndroidElementsHash. getInstance(). getElement(destElId); }


        解析出json字串

        params項的子

        destElId,然后

        從控件哈希表中

        找到目標

        AndroidElement

        控件返回

        getElement

        AndroidElement

        public AndroidElement getElement() throws JSONException { String elId = (String) params(). get("elementId"); return AndroidElementsHash.getInstance(). getElement(elId); }


        解析出json字串

        params項的子

        elementId,

        后從控件哈希表

        中找到目標

        AndroidElement

        控件返回

        isElementCommand

        boolean

        public boolean isElementCommand() { if (cmdType == AndroidCommandType.ACTION) { try { return json.getString("action"). startsWith("element:"); } catch (final JSONException e) { return false; } } return false; }


        解析json字串中

        ’action’項的值,如果是以’element:’

        字串開始的話就證

        明是個控件相干的

        命令,否則就不是


        params

        Hashtable

        <String,

        Object>

        public Hashtable<String, Object> params() throws JSONException { final JSONObject paramsObj = json.getJSONObject("params"); final Hashtable<String, Object> newParams = new Hashtable<String, Object>(); final Iterator<?> keys = paramsObj.keys(); while (keys.hasNext()) { final String param = (String) keys.next(); newParams.put(param, paramsObj.get(param)); } return newParams; }


        json

        生活不易,碼農辛苦
        如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
        程序員人生
        ------分隔線----------------------------
        分享到:
        ------分隔線----------------------------
        關閉
        程序員人生
        主站蜘蛛池模板: 久久久久999 | 成人在线免费播放视频 | 一区二区三区在线观看视频 | 国产成人精品不卡 | 日本 欧美 国产 | 91九色网| 91在线一区二区三区 | 47pao国产成永久免费视频 | 亚洲三级网站 | 日韩一区不卡 | 亚洲一级片 | 999这里只有精品 | 精品久久久久久综合日本 | 国产成人av一区二区三区 | 色综合精品久久久久久久 | 99精品国产一区二区 | 亚洲黄色精品 | 欧美日韩aaa | 欧美精品成人一区二区三区四区 | 国产艳妇 | 三级久久 | 日本中文字幕在线看 | 亚洲免费综合 | 日韩在线 | 欧美在线一区二区 | 日本国产一区二区 | 亚洲激情自拍偷拍 | 蜜桃一区 | 精品av久久久久电影 | 青青草av| 精品一区二区三区免费视频 | 视频在线一区二区 | 亚洲精品尤物福利在线一区 | 自拍视频国产 | 日韩综合在线视频 | 欧洲精品一区 | 国产日韩精品一区二区 | 国产一区二区三区免费观看在线 | 中文字幕+乱码+中文乱码图片 | 99免费精品视频 | 久久国产精品一区二区三区 |