溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Appium Android Bootstrap源碼分析之簡介

發布時間:2020-07-09 09:20:38 來源:網絡 閱讀:299 作者:zhukev 欄目:移動開發

在上一個系列中我們分析了UiAutomator的核心源碼,對UiAutomator是怎么運行的原理有了根本的了解。今天我們會開始另外一個在安卓平臺上基于UiAutomator的新起之秀--Appium的源碼分析之旅。

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

1. Bootstrap定義及在Appium中扮演的角色

我們先看一下本人大概一個月之前剛接觸appium時整理的一個高層架構圖

Appium Android Bootstrap源碼分析之簡介

下面一部分就是藍色的就是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是以UiAutomatorTestCase的方式運行的,所以這里的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



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


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就是上面AndroidElementid這個成員變量。每有一個新的控件從appium pc端過來這個值就會加一

Click

execute


CommandHandler

處理點擊命令的類。

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

其他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,看不明白也沒有關系,我后面會另外開一篇文章專門來描述這個流程以把所有的關鍵類給串起來的。
Appium Android Bootstrap源碼分析之簡介


 

作者

自主博客

微信

CSDN

天地會珠海分舵

http://techgogogo.com


服務號:TechGoGoGo

掃描碼:

Appium Android Bootstrap源碼分析之簡介

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女