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ā)鏈接給通訊錄里的所有好友例书。