使用UI Automator實現(xiàn)Android UI的自動化測試

0x01 概述

UI Automator測試框架提供了一組API來構(gòu)建UI測試台猴,用于在用戶應用和系統(tǒng)應用中執(zhí)行交互。UI Automator測試框架非常適合編寫黑盒自動化測試鬼店,其中的測試代碼不依賴于目標應用的內(nèi)部實現(xiàn)詳情默终。

0x02 使用uiautomatorviewer工具獲取Android應用的控件信息

uiautomatorviewer 工具提供了方便的GUI澳淑,可以掃描和分析Android設備上當前顯示的UI組件。您可以使用此工具檢查布局層次結(jié)構(gòu)仲义,并查看在設備前臺顯示的UI組件屬性婶熬。利用此信息剑勾,可以使用UI Automator創(chuàng)建控制更加精確的測試。

uiautomatorviewer 工具位于<android-sdk>/tools/目錄中赵颅。

uiautomatorviewer.png

0x03 在Android項目中添加依賴

androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'

0x04 創(chuàng)建單元測試類

UiTest.png

0x05 創(chuàng)建測試用例

// 使用JUnit4運行器
@RunWith(AndroidJUnit4.class)
public class UiTest {

    // Instrumentation可以在主程序啟動之前虽另,創(chuàng)建模擬的Context;發(fā)送UI事件給應用程序性含;
    // 檢查程序當前運行狀態(tài)洲赵;控制Android如何加載應用程序,控制應用程序和控件的生命周期;
    // 可以直接調(diào)用控件的方法商蕴,對控件的屬性進行查看和修改
    private Instrumentation mInstrumentation;

    // 代表著Android設備
    private UiDevice mUiDevice;

    // 測試用例執(zhí)行前叠萍,用于一些處理一些初始化工作
    @Before
    public void setUp() {
        mInstrumentation = InstrumentationRegistry.getInstrumentation();
        mUiDevice = UiDevice.getInstance(mInstrumentation);
    }

    // 一個測試用例
    @Test
    public void testAdd() {
        // 獲取屏幕上計算器的數(shù)字"9"的控件,"com.android.calculator2:id/digit_9"為通過uiautomatoviewer工具獲取的控件id
        UiObject2 digit9 = mUiDevice.findObject(By.res("com.android.calculator2:id/digit_9"));
        // 獲取屏幕上計算器的數(shù)字"8"的控件
        UiObject2 digit8 = mUiDevice.findObject(By.res("com.android.calculator2:id/digit_8"));
        // 獲取屏幕上計算器的"*"控件
        UiObject2 opMul = mUiDevice.findObject(By.res("com.android.calculator2:id/op_mul"));
        // 獲取屏幕上計算器的"="的控件
        UiObject2 opEq = mUiDevice.findObject(By.res("com.android.calculator2:id/eq"));
        // 獲取屏幕上計算器的結(jié)果顯示控件
        UiObject2 result = mUiDevice.findObject(By.res("com.android.calculator2:id/result"));

        // 自動依序執(zhí)行:
        // 1.點擊計算器"9"控件
        // 2.點擊計算器"*"控件
        // 3.點擊計算器"8"控件
        // 4.點擊計算器"="控件
        digit9.click();
        opMul.click();
        digit8.click();
        opEq.click();

        // 獲取計算結(jié)果控件的值
        String resultValue = result.getText();

        // 進行斷言判斷绪商,判斷結(jié)果是否和預期一致
        Assert.assertEquals(72, Integer.parseInt(resultValue));
    }

    // 測試用例執(zhí)行完后執(zhí)行
    @After
    public void tearDown() {
    }
}
digit9.jpg

0x06 執(zhí)行測試用例

result.gif

0x07 相關API介紹

常見組件操作苛谷,類-UiObject2

功能 方法
點擊 public boolean click()
長按 public boolean longClick()
拖動 public void drag(Point dest)
輸入 public boolean setText(String text)

常見設備操作,類-UiDevice

功能 方法
點擊坐標 public void click(int x, int y)
按鍵 public void pressKeyCode(int keyCode)
滑動 public boolean swipe(int startX, int startY,int endX,int endY,int steps)// 1個步長表示5ms

0x08 其他用途

自動化是用于解放雙手格郁,將機械化的重復操作交由程序腹殿。UIAutomator可以用于進行重復的UI測試,也可以用于完成其他的類似轉(zhuǎn)發(fā)鏈接給通訊錄里的所有好友例书。

參考鏈接

  1. 測試支持庫

  2. Android白盒測試之Instrumentation初探(一)

    ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锣尉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子决采,更是在濱河造成了極大的恐慌自沧,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件树瞭,死亡現(xiàn)場離奇詭異拇厢,居然都是意外死亡,警方通過查閱死者的電腦和手機晒喷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門孝偎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凉敲,你說我怎么就攤上這事衣盾。” “怎么了爷抓?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵雨效,是天一觀的道長。 經(jīng)常有香客問我废赞,道長,這世上最難降的妖魔是什么叮姑? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任唉地,我火速辦了婚禮据悔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耘沼。我一直安慰自己极颓,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布群嗤。 她就那樣靜靜地躺著菠隆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狂秘。 梳的紋絲不亂的頭發(fā)上骇径,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音者春,去河邊找鬼破衔。 笑死,一個胖子當著我的面吹牛钱烟,可吹牛的內(nèi)容都是我干的晰筛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼拴袭,長吁一口氣:“原來是場噩夢啊……” “哼读第!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拥刻,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怜瞒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后泰佳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盼砍,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年逝她,在試婚紗的時候發(fā)現(xiàn)自己被綠了浇坐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡黔宛,死狀恐怖近刘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情臀晃,我是刑警寧澤觉渴,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站徽惋,受9級特大地震影響案淋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜险绘,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一踢京、第九天 我趴在偏房一處隱蔽的房頂上張望誉碴。 院中可真熱鬧,春花似錦瓣距、人聲如沸黔帕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽成黄。三九已至,卻和暖如春逻杖,著一層夾襖步出監(jiān)牢的瞬間奋岁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工弧腥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厦取,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓管搪,卻偏偏與公主長得像虾攻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子更鲁,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容