Appium Android Bootstrap源碼分析之簡介

來源:互聯網
上載者:User

Appium Android Bootstrap源碼分析之簡介

 

本文在真箇系列中會扮演一個簡介的角色,不會分析任何的代碼,只會先給大家一個基本的印象,方便大家在持有這個印象的基礎上往下和本人一塊分析。

1. Bootstrap定義及在Appium中扮演的角色我們先看一下本人大概一個月之前剛接觸appium時整理的一個高層架構圖

下面一部分就是藍色的就是bootstrap所在的位置,可以看到它是運行在我們的安卓目標測試機器端的,它會監聽4724連接埠獲得命令然後pass給UiAutomator來做處理。

那麼我們應該怎麼來給bootstrap做一個定義呢?我不知道官方有沒有做一個定義,但是按照我自己的語言,我會這樣來定義它:

 

Bootstrap是Appium運行在安卓目標測試機器上的一個UiAutomator測試指令碼,該指令碼的唯一一個測試方法所做的事情是在目標機器開啟一個socket伺服器來把一個session中Appium從PC端過來的命令發送給UiAutomator來執行處理。

 

這個定義說明了bootstrap在appium和uiautomator中究竟處於一個什麼樣的角色: 首先,它是一個uiautomator的測試指令碼,它的入口類Bootstrap繼承於UiAutomatorTestCase,所以UiAututomator可以正常運行它,它也可以正常的使用uiautomator的方法,這個就是appium的命令可以轉換成uiautomator的命令的關鍵其次,它是一個socket伺服器,它專門監聽4724連接埠過來的appium的串連和命令資料,並把appium的命令轉換成uiautomator的命令來讓uiautomator進行處理最後,它處理的是appium從pc端過來的命令,而非一個檔案。這在初次接觸appium的朋友是很容易困惑的,以為appium是整個指令檔發送到目標機器再由bootstrap進行分析處理的,事實並非如此
2. Bootstrap關鍵類一覽表

上面寥寥幾句道出了bootstrap的定義,那麼往下我們就繼續寥寥幾行的把bootstrap這個jar包的關鍵類以及它的關鍵方法和相應的本人的一些說明給列出來,給大家現有一個draft idea每個類大概是怎麼一回事,這樣我們往下的文章就比較好說,大家也比較好理解了。

Class

Key Method

Key Member

Parent

Description

Comment

Bootstrap

testRunServer

 

 

以一個UiAutomatorTestCase的方法的方式運行一個SocketServer來監聽4724連接埠

整個bootstrap是以UiAutomator的TestCase的方式啟動並執行,所以這裡的Bootstrap這個類必須要繼承於UiAutomatorTestCase

SocketServer

handleClientData

 

 

讀取socket進來的字串命令資訊並轉換成AndroidCommand命令然後調用runCommand命令執行命令進行返回

 

AndroidComma

ndType

 

enum AndroidCommandType {

ACTION,SHUTDOWN

}

 

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

 

AndroidComma

nd

action/getElement

JSONObject json;

AndroidCommandType cmdType;

 

從使用者發過來的json命令資訊得到真正的命令

 

CommandHand

ler

execute

 

 

虛擬類,其他真實CommandHandler如click的父類

 

AndroidComma

ndExecutor

execute

HashMap<

String,

CommandHan

dler> map

 

 

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

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

 

AndroidComma

ndResult

AndroidCommandResult

JSONObject json

 

組織json格式傳回值的類

 

AndroidElement

Click

UiObject el;

String id;

 

代表了一個控制項

其中id是其在AndroidElementsHash維護的elements這個雜湊表的key,並非控制項id。

AndroidElement

Hash

addElement

Hashtable<

String,

AndroidEle

ment>

elements;

 

 

維護這個session當前為止碰到過的所有控制項的雜湊表

注意key就是上面AndroidElement的id這個成員變數。每有一個新的控制項從appium pc端過來這個值就會加一

Click

execute

 

CommandHandler

處理點擊命令的類。

真正執行的是傳進來的AndroidCommand對應UiObject的Click方法

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

Strategy

fromString

publicenumStrategy {

 

CLASS_NAME

(class

name”),

 

CSS_SELECT

OR(css

selector”)

,

ID(“id),

NAME(“name

),

LINK_TEXT(

link

text),

PARTIAL_LI

NK_TEXT(“p

artial

link

text),

XPATH(“xpa

th),

ACCESSIBIL

ITY_ID(“ac

cessibilit

y id”),

ANDROID_UI

AUTOMATOR(

-android

uiautomato

r);

 

尋找控制項命令的策略類

find這個CommandHandler會根據使用者給出的不同策略來用不同的方式進行控制項尋找。比如用xpath的方式和用uiautomator的方式是不一樣的

 

 

 

 

 

 

這裡類在我們往下的分析文章中會做進一步的闡述,所以在這裡你只需要由一個rough的idea這些類大概是怎麼一回事就可以了。

 

3. Bootstrap運行流程簡介本來想畫一個類圖來描述bootstrap的架構的,但通過以上的類表可以看出來bootstrap裡面的關鍵類基本沒有真正用到物件導向中的繼承,因為它們基本上都沒有父類。其實我們也可以理解,每個類都不算複雜做的事情都不是很多,就算稍微需要做多點事情,組合其他的類來做就好了。 所以這裡我也放棄給大家提供類圖了,就提供我自己手畫的(還是那句話,本人的macbook pro上沒有安裝相應的收費流程圖軟體)一個以處理appium從pc端過來的click命令的流程為例子的順序圖,大家先有一個初步的idea,看不明白也沒有關係,我後面會另外開一篇文章專門來描述這個流程以把所有的關鍵類給串起來的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.