真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

AppiumAndroidBootstrap源碼分析之簡(jiǎn)介

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

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到陽(yáng)曲網(wǎng)站設(shè)計(jì)與陽(yáng)曲網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋陽(yáng)曲地區(qū)。

本文在真?zhèn)€系列中會(huì)扮演一個(gè)簡(jiǎn)介的角色,不會(huì)分析任何的代碼,只會(huì)先給大家一個(gè)基本的印象,方便大家在持有這個(gè)印象的基礎(chǔ)上往下和本人一塊分析。

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

我們先看一下本人大概一個(gè)月之前剛接觸appium時(shí)整理的一個(gè)高層架構(gòu)圖

Appium Android Bootstrap源碼分析之簡(jiǎn)介

下面一部分就是藍(lán)色的就是bootstrap所在的位置,可以看到它是運(yùn)行在我們的安卓目標(biāo)測(cè)試機(jī)器端的,它會(huì)監(jiān)聽4724端口獲得命令然后pass給UiAutomator來(lái)做處理。

那么我們應(yīng)該怎么來(lái)給bootstrap做一個(gè)定義呢?我不知道官方有沒(méi)有做一個(gè)定義,但是按照我自己的語(yǔ)言,我會(huì)這樣來(lái)定義它:

  • Bootstrap是Appium運(yùn)行在安卓目標(biāo)測(cè)試機(jī)器上的一個(gè)UiAutomator測(cè)試腳本,該腳本的唯一一個(gè)測(cè)試方法所做的事情是在目標(biāo)機(jī)器開啟一個(gè)socket服務(wù)器來(lái)把一個(gè)session中Appium從PC端過(guò)來(lái)的命令發(fā)送給UiAutomator來(lái)執(zhí)行處理。

這個(gè)定義說(shuō)明了bootstrap在appium和uiautomator中究竟處于一個(gè)什么樣的角色:
  • 首先,它是一個(gè)uiautomator的測(cè)試腳本,它的入口類Bootstrap繼承于UiAutomatorTestCase,所以UiAututomator可以正常運(yùn)行它,它也可以正常的使用uiautomator的方法,這個(gè)就是appium的命令可以轉(zhuǎn)換成uiautomator的命令的關(guān)鍵
  • 其次,它是一個(gè)socket服務(wù)器,它專門監(jiān)聽4724端口過(guò)來(lái)的appium的連接和命令數(shù)據(jù),并把a(bǔ)ppium的命令轉(zhuǎn)換成uiautomator的命令來(lái)讓uiautomator進(jìn)行處理
  • 最后,它處理的是appium從pc端過(guò)來(lái)的命令,而非一個(gè)文件。這在初次接觸appium的朋友是很容易困惑的,以為appium是整個(gè)腳本文件發(fā)送到目標(biāo)機(jī)器再由bootstrap進(jìn)行分析處理的,事實(shí)并非如此

2. Bootstrap關(guān)鍵類一覽表

上面寥寥幾句道出了bootstrap的定義,那么往下我們就繼續(xù)寥寥幾行的把bootstrap這個(gè)jar包的關(guān)鍵類以及它的關(guān)鍵方法和相應(yīng)的本人的一些說(shuō)明給列出來(lái),給大家現(xiàn)有一個(gè)draft idea每個(gè)類大概是怎么一回事,這樣我們往下的文章就比較好說(shuō),大家也比較好理解了。

Class

Key Method

Key Member

Parent

Description

Comment

Bootstrap

testRunServer



以一個(gè)UiAutomatorTestCase的方法的方式運(yùn)行一個(gè)SocketServer來(lái)監(jiān)聽4724端口

整個(gè)bootstrap是以UiAutomator的TestCase的方式運(yùn)行的,所以這里的Bootstrap這個(gè)類必須要繼承于UiAutomatorTestCase

SocketServer

handleClientData



讀取socket進(jìn)來(lái)的字串命令信息并轉(zhuǎn)換成AndroidCommand命令然后調(diào)用runCommand命令執(zhí)行命令進(jìn)行返回


AndroidComma

ndType


enum AndroidCommandType {

ACTION,SHUTDOWN

}


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


AndroidComma

nd

action/getElement

JSONObject json;

AndroidCommandType cmdType;


從用戶發(fā)過(guò)來(lái)的json命令信息得到真正的命令


CommandHand

ler

execute



虛擬類,其他真實(shí)CommandHandler如click的父類


AndroidComma

ndExecutor

execute

HashMap<

String, 

CommandHan

dler> map



map是所有的命令字串和真實(shí)的CommandHandler的一個(gè)映射。

其成員函數(shù)execute就是通過(guò)字串命令找到map對(duì)應(yīng)的handler然后執(zhí)行的


AndroidComma

ndResult

AndroidCommandResult

JSONObject json


組織json格式返回值的類


AndroidElement

Click

UiObject el;

String id;


代表了一個(gè)控件

其中id是其在AndroidElementsHash維護(hù)的elements這個(gè)哈希表的key,并非控件id。

AndroidElement

Hash

addElement

Hashtable<

String, 

AndroidEle

ment> 

elements;



維護(hù)這個(gè)session當(dāng)前為止碰到過(guò)的所有控件的哈希表

注意key就是上面AndroidElement的id這個(gè)成員變量。每有一個(gè)新的控件從appium pc端過(guò)來(lái)這個(gè)值就會(huì)加一

Click

execute


CommandHandler

處理點(diǎn)擊命令的類。

真正執(zhí)行的是傳進(jìn)來(lái)的AndroidCommand對(duì)應(yīng)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這個(gè)CommandHandler會(huì)根據(jù)用戶給出的不同策略來(lái)用不同的方式進(jìn)行控件查找。比如用xpath的方式和用uiautomator的方式是不一樣的







這里類在我們往下的分析文章中會(huì)做進(jìn)一步的闡述,所以在這里你只需要由一個(gè)rough的idea這些類大概是怎么一回事就可以了。


3. Bootstrap運(yùn)行流程簡(jiǎn)介

本來(lái)想畫一個(gè)類圖來(lái)描述bootstrap的架構(gòu)的,但通過(guò)以上的類表可以看出來(lái)bootstrap里面的關(guān)鍵類基本沒(méi)有真正用到面向?qū)ο笾械睦^承,因?yàn)樗鼈兓旧隙紱](méi)有父類。其實(shí)我們也可以理解,每個(gè)類都不算復(fù)雜做的事情都不是很多,就算稍微需要做多點(diǎn)事情,組合其他的類來(lái)做就好了。
所以這里我也放棄給大家提供類圖了,就提供我自己手畫的(還是那句話,本人的macbook pro上沒(méi)有安裝相應(yīng)的收費(fèi)流程圖軟件)一個(gè)以處理appium從pc端過(guò)來(lái)的click命令的流程為例子的順序圖,大家先有一個(gè)初步的idea,看不明白也沒(méi)有關(guān)系,我后面會(huì)另外開一篇文章專門來(lái)描述這個(gè)流程以把所有的關(guān)鍵類給串起來(lái)的。
Appium Android Bootstrap源碼分析之簡(jiǎn)介


 

作者

自主博客

微信

CSDN

天地會(huì)珠海分舵

http://techgogogo.com


服務(wù)號(hào):TechGoGoGo

掃描碼:

Appium Android Bootstrap源碼分析之簡(jiǎn)介

http://weahome.cn/article/pedhcc.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部

    • <ul id="mwacm"><sup id="mwacm"></sup></ul>