Android App開發(fā)的自動化測試框架UI Automator使用教程
Android的自動化測試有很多框架,其中ui automator是google官方提供的黑盒UI相關(guān)的自動化測試工具,(GitHub主頁:case使用java寫,今天實踐了一下官方文檔中樣例程序,其中還是有一些小問題需要總結(jié)一下的。
環(huán)境準備:
1.JDK(是的,你沒看錯,基礎(chǔ)的android開發(fā)環(huán)境必備),以及對應(yīng)的環(huán)境變量配置,不會的可以自己百度下下
2.Android Studio(IDE尊崇個人意愿)
3.android SDK以及配置
4.ANT(主要用于build我們的腳本,生成jar包)
ant的搭建主要分幾步:
1.下載ant安裝文件并且解壓安裝;
2.新建系統(tǒng)環(huán)境變量ANT_HOME,參數(shù)值是你的ant安裝目錄;
3.在Path環(huán)境變量中添加ant安裝目錄的bin文件夾,比如我的就是C:\cod\apache-ant-1.9.6\bin
4.配置完以后,測試一下,在命令行下輸入ant -version,如果顯示你所安裝的ant版本信息,證明環(huán)境變量配置成功
使用流程
1、使用ADT創(chuàng)建一個java的項目
在創(chuàng)建項目的時候要加上JUnit與你使用的Android platforms中對應(yīng)的android.jar與uiautomator.jar
2、新建一個包(我這里就只叫com)
3、再這個包下創(chuàng)建一個class,輸入以下java代碼,代碼全是官方文檔上的代碼,除了最上面的package
package com; import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundException; import com.android.uiautomator.core.UiScrollable; import com.android.uiautomator.core.UiSelector; import com.android.uiautomator.testrunner.UiAutomatorTestCase; public class Runer extends UiAutomatorTestCase { public void testDemo() throws UiObjectNotFoundException { // Simulate a short press on the HOME button. getUiDevice().pressHome(); // We're now in the home screen. Next, we want to simulate // a user bringing up the All Apps screen. // If you use the uiautomatorviewer tool to capture a snapshot // of the Home screen, notice that the All Apps button's // content-description property has the value “Apps”. We can // use this property to create a UiSelector to find the button. UiObject allAppsButton = new UiObject(new UiSelector() .description("Apps")); // Simulate a click to bring up the All Apps screen. allAppsButton.clickAndWaitForNewWindow(); // In the All Apps screen, the Settings app is located in // the Apps tab. To simulate the user bringing up the Apps tab, // we create a UiSelector to find a tab with the text // label “Apps”. UiObject appsTab = new UiObject(new UiSelector() .text("Apps")); // Simulate a click to enter the Apps tab. appsTab.click(); // Next, in the apps tabs, we can simulate a user swiping until // they come to the Settings app icon. Since the container view // is scrollable, we can use a UiScrollable object. UiScrollable appViews = new UiScrollable(new UiSelector() .scrollable(true)); // Set the swiping mode to horizontal (the default is vertical) appViews.setAsHorizontalList(); // Create a UiSelector to find the Settings app and simulate // a user click to launch the app. UiObject settingsApp = appViews.getChildByText(new UiSelector() .className(android.widget.TextView.class.getName()), "Settings"); settingsApp.clickAndWaitForNewWindow(); // Validate that the package name is the expected one UiObject settingsValidation = new UiObject(new UiSelector() .packageName("com.android.settings")); assertTrue("Unable to detect Settings", settingsValidation.exists()); UiObject reportBug = new UiObject(new UiSelector().text("Sound")); reportBug.clickAndWaitForNewWindow(); UiObject soundValidation = new UiObject(new UiSelector() .text("Volumes")); assertTrue("Unable to detect Sound", soundValidation.exists()); getUiDevice().pressHome(); } }
我這里在使用ADT自已的ant插件時提示
build.xml:26: Class not found: javac1.8
網(wǎng)上查了查,是插件與我java環(huán)境不符,下載最新的ant插件就可以了http://ant.apache.org/bindownload.cgi
下載這個tar.gz包,解壓,然后將apache-ant-1.9.4\bin目錄添加到環(huán)境變量PATH中
然后cmd到android sdk的tools目錄,使用andrlid list命令,記住你將要在模擬器中運行的(也是你剛剛導(dǎo)入android.jar與uiautomator.jar包時所在的platforms)
在cmd下使用
android create uitest-project -n <name> -t <android-sdk-ID> -p <path>
-n 為生成的jar包名稱,自已任意定義,
-t 為上面查看到的值,我這里是1
-p 為輸出路徑,這里就是剛才創(chuàng)建的java項目所在的路徑
android create uitest-project -n AutoRunner -t 1 -p D:\myAndroidStudy\androidTest
然后再cmd進入D:\myAndroidStudy\androidTest,使用ant build命令生成AutoRunner.jar文件
5、將這個AutoRunner.jar文件push到模擬器中
adb push AutoRunner.jar /data/local/tmp
6、使用
adb shell uiautomator runtest AutoRunner.jar –c com.Runer
使Runer類運行
我的代碼里又在官方基礎(chǔ)上多了一個點擊”sound”的操作與點擊Home鍵操作
UiObject reportBug = new UiObject(new UiSelector().text("Sound")); reportBug.clickAndWaitForNewWindow(); UiObject soundValidation = new UiObject(new UiSelector() .text("Volumes")); assertTrue("Unable to detect Sound", soundValidation.exists()); getUiDevice().pressHome(); image
這個其實也只是一個簡單的玩具代碼,沒有什么意義,但是官方作為一個引導(dǎo),其中也使用了一些最常見的接口。以后再深入的學(xué)習uiautomator
總結(jié)
優(yōu)點:
1.可以對所有操作進行自動化,操作簡單;
2.不需要對被測程序進行重簽名,且,可以測試所有設(shè)備上的程序,比如~某APP,比如~撥號,比如~發(fā)信息等等
3.對于控件定位,要比robotium簡單一點點
缺點:
1.uiautomator需要android level 16以上才可以使用,因為在level 16及以上的API里面才帶有uiautomator工具
2.如果想要使用resource-id定位控件,則需要level 18及以上才可以
3.對中文支持不好(不代表不支持,第三方j(luò)ar可以實現(xiàn))
4.個人感覺,控件定位不如robotium那樣層級分明,僅僅個人感覺,用戶行為注入還是和插樁有點點區(qū)別的
相關(guān)文章
Android Service服務(wù)不被停止詳解及實現(xiàn)
這篇文章主要介紹了Android Service服務(wù)不被停止詳解及實現(xiàn)的相關(guān)資料,有很多應(yīng)用在設(shè)置運行中會被直接停止掉,這里就提供一個方法一直運行,需要的朋友可以參考下2016-11-11Android廣播接收機制詳細介紹(附短信接收實現(xiàn))
這篇文章主要介紹了Android廣播接收機制詳細介紹(附短信接收實現(xiàn)),本文講解了BroadcastReceiver的注冊過程BroadcastReceiver的步驟,并給出一個短信廣播實現(xiàn)示例,需要的朋友可以參考下2015-06-06Android實現(xiàn)仿excel數(shù)據(jù)表格效果
這篇文章主要介紹了Android實現(xiàn)仿excel數(shù)據(jù)表格效果的實現(xiàn)代碼,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-10-10Android編程之ActionBar Tabs用法實例分析
這篇文章主要介紹了Android編程之ActionBar Tabs用法,結(jié)合實例形式分析了ActionBar Tabs的功能及Tab切換不同的Fragment的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-03-03Android Studio生成 Flutter 模板代碼技巧詳解
這篇文章主要為大家介紹了Android Studio生成 Flutter 模板代碼技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10Android中使用TabHost 與 Fragment 制作頁面切換效果
這篇文章主要介紹了Android中使用TabHost 與 Fragment 制作頁面切換效果的相關(guān)資料,需要的朋友可以參考下2016-03-03Android編程實現(xiàn)TextView垂直自動滾動功能【附demo源碼下載】
這篇文章主要介紹了Android編程實現(xiàn)TextView垂直自動滾動功能,詳細分析了Android TextView垂直自動滾動功能的實現(xiàn)步驟與布局、功能相關(guān)技巧,并附帶了demo源碼供讀者下載,需要的朋友可以參考下2017-02-02