uiautomator中一些常用的方法

package com.sprd.uiautomator.util;






import java.io.BufferedReader;


import java.io.File;


import java.io.FileInputStream;


import java.io.IOException;


import java.io.InputStreamReader;


import java.lang.reflect.Field;


import java.lang.reflect.InvocationTargetException;


import java.lang.reflect.Method;


import java.text.SimpleDateFormat;


import java.util.Date;


import java.util.Locale;


import java.util.Random;






import javax.xml.parsers.DocumentBuilder;


import javax.xml.parsers.DocumentBuilderFactory;


import javax.xml.parsers.ParserConfigurationException;


import javax.xml.xpath.XPath;


import javax.xml.xpath.XPathConstants;


import javax.xml.xpath.XPathExpression;


import javax.xml.xpath.XPathExpressionException;


import javax.xml.xpath.XPathFactory;






import org.json.JSONArray;


import org.json.JSONObject;


import org.w3c.dom.Document;


import org.w3c.dom.Node;


import org.w3c.dom.NodeList;


import org.xml.sax.SAXException;






import android.content.res.Configuration;


import android.os.Build;


import android.os.Environment;


import android.os.RemoteException;


import android.os.SystemClock;


import android.text.TextUtils;


import android.util.Log;


import android.view.InputDevice;


import android.view.KeyCharacterMap;


import android.view.KeyEvent;






import com.android.uiautomator.core.UiCollection;


import com.android.uiautomator.core.UiDevice;


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.core.UiWatcher;


import com.android.uiautomator.testrunner.UiAutomatorTestCase;


import com.sprd.uiautomator.camera.CameraUtils.SWIPEDIRECTION;






public class UiUtil extends UiAutomatorTestCase {


public static String TAG = "testlog";






// private static final String path_screenshot =


// "/storage/sdcard0/slog/screenshot/";


private static final String dir_result = "result/";


private static final String dir_fail = "fail/";






private static final String path_screenshot = readConfig("path_screenshot");//getSDPath()+"/";


private static final String path_screenshot_result = path_screenshot


+ dir_result;


private static final String path_screenshot_fail = path_screenshot


+ dir_fail;






public static final String OWN_NUMBER_OF_SIM1 = readConfig("SIM1_Number");


public static final String OWN_NUMBER_OF_SIM2 = readConfig("SIM2_Number");


// public static final String TEST_CONTACT_NAME = readConfig("Contacts_Name");


public static final String TEST_CONTACT_NUMBER = readConfig("Contacts_Number");






// ningbiao


public static final String ACCOUNT_NAME = readConfig("account_name");


public static final String ACCOUNT_PASSWORD = readConfig("account_password");


// ningbiao






public static final String TEST_RECIPIENTS = OWN_NUMBER_OF_SIM1;


// public static final String TEST_MESSAGE = readConfig("Message_Test_Content");






public static final int RES_CONFIG = 0;


public static final String RES_CONFIG_FILE = "config.xml";


public static final int RES_RESOURCE = 1;


public static final String RES_RESOURCE_FILE = "resource.xml";


public static final String RES_RESOURCE_FILE_EN = "resource-EN.xml";


public static final String RES_CONFIG_FOLER_CASE = "config_hq_uiautotest";


public static final String RES_CONFIG_PATH = "/data/local/tmp/"


+ RES_CONFIG_FOLER_CASE + "/";






public static enum SIM_SELECT_TYPE {


DATACONNECT, CALL, VIDEOCALL, MMS


}






public static enum CALL_SIM_TYPE {


SIM1, SIM2


}






public static enum PREFERRED_NETWORK_TYPE {


AUTO, GSM_ONLY, WCDMA_ONLY, TD_ONLY, LTE_ONLY


}






protected void setUp() throws Exception {


super.setUp();


// addWatcher();


// checkFirstPowerOn();


}






protected void tearDown() throws Exception {


// releaseAllWatcher();


super.tearDown();


}






// ningbiao add begin


private static String[][] setupWizard = {


// welcome


{ "Welcome", "com.google.android.setupwizard:id/start", "2" },


// when there is no sim cards


{


"Insert SIM cards",


"com.google.android.setupwizard:id/setup_wizard_navbar_next",


"2" },


// select prime sim card


{


"Select a SIM for cellular data",


"com.google.android.setupwizard:id/setup_wizard_navbar_next",


"2" },


// select sim for calls


{


"Select a SIM for calls",


"com.google.android.setupwizard:id/setup_wizard_navbar_next",


"2" },


// select sim for sms


{


"Select a SIM for text messages",


"com.google.android.setupwizard:id/setup_wizard_navbar_next",


"2" },


// select wifi hotpot


{ "Select Wi‑Fi network",


"com.android.settings:id/setup_wizard_navbar_next", "2" },


// skip wifi connect


{ "Skip anyway", "android:id/button1", "2" },


// connect check


{


"Checking connection…",


"com.google.android.setupwizard:id/setup_wizard_navbar_next",


"30" },


// connect skip


{ "Skip anyway", "android:id/button1", "2" },


// when there is no sim cards


{


"Date & time",


"com.google.android.setupwizard:id/setup_wizard_navbar_next",


"2" },


// input name


{


"Name",


"com.google.android.setupwizard:id/setup_wizard_navbar_next",


"10" },


// more


{


"Google services",


"com.google.android.setupwizard:id/setup_wizard_navbar_next",


"2" },


// more


{


"Google services",


"com.google.android.setupwizard:id/setup_wizard_navbar_next",


"2" },


// next


{


"Google services",


"com.google.android.setupwizard:id/setup_wizard_navbar_next",


"2" },


// welcome


{


"Welcome",


"com.google.android.googlequicksearchbox:id/cling_dismiss_longpress_info",


"2" },


// welcome(has not GMS)


{ "Welcome",


"com.android.launcher3:id/cling_dismiss_longpress_info",


"2" } };






private static void checkCardSel() throws UiObjectNotFoundException {


loginfo(TAG, "checkCardSel");


UiObject objCardSel = findByText("Select primary card");


UiObject objCardSelCN = findByText("主卡选择");


if (objCardSel.exists() || objCardSelCN.exists()) {


loginfo(TAG, "find primary card");


UiObject objTopItem = findById("android:id/select_dialog_listview")


.getChild(


new UiSelector().className(


"android.widget.LinearLayout").index(0));


if (objTopItem.exists()) {


objTopItem.click();


}


}


}






private static void checkUsbPrompt() throws UiObjectNotFoundException {


loginfo(TAG, "checkUsbPrompt");






UiObject usbTitle = findByText("USB computer connection");


if (usbTitle.exists()) {


pressBack();


}


}






private static void keepBackLightOn() {


try {


if (!isScreenOn()) {


// UiDevice.getInstance().pressKeyCode(26);


UiDevice.getInstance().wakeUp();


}


} catch (Exception e) {






}


}






private boolean clickNextIfExistByTitleAndId(String title, String id,


int timeout) throws UiObjectNotFoundException {


// if(title.equals("Name")){


// Configurator.getInstance().setWaitForIdleTimeout(5 * 1000);


// }else{


// Configurator.getInstance().setWaitForIdleTimeout(10 * 1000);


// }


// UiObject objTitle = findByTextContains(title);


UiObject objId = findById(id);


loginfo(TAG, "check next title:" + title + ",id:" + id + ",timeout:"


+ timeout);


while (timeout-- >= 0) {


Sleep(1000);


onScreen();


// if (!objTitle.exists()) {


// // keepBackLightOn();


// loginfo(TAG, "!objTitle.exists() timeout:" + timeout);


// continue;


// }


if (!objId.exists()) {


// keepBackLightOn();


loginfo(TAG, "!objId.exists() timeout:" + timeout);


continue;


}


if (!objId.isEnabled()) {


// keepBackLightOn();


loginfo(TAG, "!objId.isEnabled() timeout:" + timeout);


continue;


}


objId.clickAndWaitForNewWindow();






return true;


}






return false;


}






private void clickSetupWizard() throws UiObjectNotFoundException,


RemoteException {


loginfo(TAG, "clickSetupWizard start...");






for (int i = 0; i < setupWizard.length; i++) {


loginfo(TAG, "check " + setupWizard[i][0]);


onScreen();


boolean result = clickNextIfExistByTitleAndId(setupWizard[i][0],


setupWizard[i][1], Integer.parseInt(setupWizard[i][2]));


if (!result && i == 0) {


loginfo(TAG,


"clickSetupWizard first welcome ui result is false!");


break;


}


}






loginfo(TAG, "clickSetupWizard end...");


}






public void checkFirstPowerOn() throws Exception {


loginfo(TAG, "checkFirstPowerOn");


updateLanguage(Locale.ENGLISH);


sleep(2000);






onScreen();


clickSetupWizard();


loginfo(TAG, "checkFirstPowerOn.........");


}






public void checkLongpress() throws Exception {


int length = setupWizard.length;


loginfo(TAG, "checkLongpress length=" + length);


if (length <= 0) {


return;


}


clickNextIfExistByTitleAndId(setupWizard[length - 1][0],


setupWizard[length - 1][1],


Integer.parseInt(setupWizard[length - 1][2]));


}






public static boolean checkInLauncher() throws UiObjectNotFoundException {


onScreen();


boolean searchBox = checkObjectExistsByID("com.google.android.googlequicksearchbox:id/search_plate");


boolean appsButton = checkObjectExistsByTextDesc(readResResource("ui_text_application")) && false;


boolean nativeLauncherPackage = checkObjectExistsByPackage("com.android.launcher3");


loginfo(TAG, "checkInLauncher searchBox=" + searchBox + ",appsButton="


+ appsButton + ",nativeLauncherPackage="


+ nativeLauncherPackage);


return searchBox || appsButton || nativeLauncherPackage;


}






public void addWatcher() throws Exception {


addWatcher(


"selectPrimaryCard",


findByText("Select primary card"),


findById("android:id/select_dialog_listview").getChild(


new UiSelector().className(


"android.widget.LinearLayout").index(0)));


addWatcher(


"selectPrimaryCardCN",


findByText("主卡选择"),


findById("android:id/select_dialog_listview").getChild(


new UiSelector().className(


"android.widget.LinearLayout").index(0)));


addWatcher(


"launcherWelcome",


findById("com.android.launcher3:id/cling_dismiss_longpress_info"),


findById("com.android.launcher3:id/cling_dismiss_longpress_info"));






addWatcher(


"launcherWelcomeGMS",


findById("com.google.android.googlequicksearchbox:id/cling_dismiss_longpress_info"),


findById("com.google.android.googlequicksearchbox:id/cling_dismiss_longpress_info"));






addWatcher("skipAnyway", findByText("Skip anyway"),


findById("android:id/button1"));






addWatcher(


"navbarNext",


findById("com.google.android.setupwizard:id/setup_wizard_navbar_next"),


findById("com.google.android.setupwizard:id/setup_wizard_navbar_next"));






addWatcher("skipNext",


findById("com.android.settings:id/setup_wizard_navbar_next"),


findById("com.android.settings:id/setup_wizard_navbar_next"));






addWatcher("wizardStart",


findById("com.google.android.setupwizard:id/start"),


findById("com.google.android.setupwizard:id/start"));






addWatcher("simNotify1", findByText("com.android.stk1:id/button_ok"),


findById("com.android.stk1:id/button_ok"));






addWatcher("simNotify2", findByText("com.android.stk2:id/button_ok"),


findById("com.android.stk2:id/button_ok"));






addWatcherCheckable("Aceptar", findByText("No volver a mostrar"),


findByText("Aceptar"));


}






public void releaseAllWatcher() throws Exception {


realeseWatcher("selectPrimaryCard");


realeseWatcher("selectPrimaryCardCN");


realeseWatcher("launcherWelcome");


realeseWatcher("launcherWelcomeGMS");


realeseWatcher("skipAnyway");


realeseWatcher("navbarNext");


realeseWatcher("skipNext");


realeseWatcher("wizardStart");


realeseWatcher("simNotify1");


realeseWatcher("simNotify2");


realeseWatcher("Aceptar");


}






// ningbiao add end






public static enum SHARE_TYPE {


MESSAGING, EMAIL, BLUETOOTH, GMAIL


}






/**


* 电话:com.android.dialer/com.android.dialer.DialtactsActivity


* 联系�?com.android.contacts/com.android.contacts.activities.PeopleActivity


* 信息:com.android.mms/.ui.ConversationList


* 浏览�?com.android.browser/.BrowserActivity


* 设置:com.android.settings/.Settings


*/


public static void openAppBypkgName(String name) {


try {


String pkgname = "";


if (name == "Dialer"


|| TextUtils.equals(name,


readResResource("phone_text_app_name"))) {


pkgname = "com.android.dialer/com.android.dialer.DialtactsActivity";


} else if (name == "People"


|| TextUtils.equals(name,


readResResource("contact_text_app_name_contacts"))


|| TextUtils.equals(name,


readResResource("contact_text_app_name"))) {


pkgname = "com.android.contacts/com.android.contacts.activities.PeopleActivity";


} else if (name == "Messaging"


|| TextUtils.equals(name,


readResResource("mms_text_app_name"))) {


pkgname = "com.android.mms/com.android.mms.ui.ConversationList";


} else if (name == "Browser"


|| TextUtils.equals(name,


readResResource("ui_text_browser"))) {


pkgname = "com.android.browser/.BrowserActivity";


} else if (name == "Settings"


|| TextUtils.equals(name,


readResResource("ui_text_setting"))) {


pkgname = "com.android.settings/.Settings";


} else if (name == "Calculator"


|| TextUtils.equals(name,


readResResource("ui_text_calculator"))) {


pkgname = "com.android.calculator2/.Calculator";


} else if (name == "Calendar"


|| TextUtils.equals(name,


readResResource("calendar_text_app_name"))) {


pkgname = "com.android.calendar/.AllInOneActivity";


} else if (name == "Camera"


|| TextUtils.equals(name,


readResResource("camera_text_app_name"))) {


pkgname = "com.android.camera2/com.android.camera.CameraLauncher";


} else if (name == readResResource("clock_text_app_name")) {


pkgname = "com.android.deskclock/.DeskClock";


} else if (name == "FileExplore"


|| TextUtils.equals(name,


readResResource("fileexplorer_text_app_name"))) {


pkgname = "com.sprd.fileexplorer/.activities.FileExploreActivity";


} else if (name == "Gallery"


|| TextUtils.equals(name,


readResResource("gallery_text_app_name"))) {


pkgname = "com.android.gallery3d/.app.GalleryActivity";


} else if (name == "Music"


|| TextUtils.equals(name, readResResource("ui_text_music"))) {


pkgname = "com.android.music/.MusicBrowserActivity";


} else if (name == "SoundRecorder"


|| TextUtils


.equals(name, readResResource("ui_text_record"))) {


pkgname = "com.android.soundrecorder/.SoundRecorder";


} else if (name == "Email") {


pkgname = "com.android.email/.activity.Welcome";


} else if (name == "FmRadio"


|| TextUtils.equals(name, readResResource("ui_text_fm"))) {


pkgname = "com.thunderst.radio/.FMRadioMainActivity";


} else if (name == "CallLog"


|| TextUtils.equals(name,


readResResource("calllog_text_app_name"))) {


pkgname = "com.android.dialer/com.android.dialer.calllog.CallLogActivity";


} else if (name == "Email"


|| TextUtils.equals(name,


readResResource("email_text_app_name"))) {


pkgname = "com.android.email/.activity.Welcome";


}






UiDevice.getInstance().pressHome();


UiUtil.Sleep(1000);


execCommand("am start -n " + pkgname);


UiUtil.Sleep(3000);


} catch (Exception e) {


// TODO: handle exception


e.printStackTrace();


// checkPoint("openApp", false);


}


}






// 通过ID查找


public static UiObject findById(String text)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().resourceId(text));


return appBtn;


}






// 通过resource和descrice查找


public static UiObject findByResourceIdAndDesc(String className, String text)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().resourceId(className)


.description(text));


return appBtn;


}






// 按Text Contains定位


public static UiObject findByTextContains(String text) {


UiObject getItem = new UiObject(new UiSelector().textContains(text));


return getItem;


}






// 通过resource和index查找


public static UiObject findByResourceIdAndIndex(String className, int index)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().resourceId(className)


.index(index));


return appBtn;


}






// 通过ID,instance查找


public static UiObject findByIdInStance(String text, int index)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().resourceId(text)


.instance(index));


return appBtn;


}






// 通过ID,index查找


public static UiObject findByIdIndex(String text, int index)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().resourceId(text).index(


index));


return appBtn;


}






// 通过Uisourceid查找


public static UiObject findByResourceId(String text)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().resourceId(text));


return appBtn;


}






// 按照className查找UiScrollable;


public static UiScrollable findUiScrollableByClassName(String className)


throws UiObjectNotFoundException {


UiScrollable scrItem = new UiScrollable(


new UiSelector().className(className));


return scrItem;


}






// 通过source和text查找


public static UiObject findByResourceIdAndText(String text1, String text2)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().resourceId(text1).text(


text2));


return appBtn;


}





// 通过source和text查找


public static UiObject findByResourceIdAndTextContains(String resourceId, String textContains)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().resourceId(resourceId).textContains(


textContains));


return appBtn;


}






// 按照className和index在UiScrollable中查找


public static UiScrollable findUiScrollableByClassNameAndInstance(


UiScrollable uiScrollable, String className, int index)


throws UiObjectNotFoundException {


UiScrollable scrItem = new UiScrollable(new UiSelector().className(


className).instance(index));


return scrItem;


}






// 获取UiCollection中的子对象的个数


public static int findChildCountFromUiCollectionByClassName(


UiCollection uiCollection, String className)


throws UiObjectNotFoundException {


return uiCollection


.getChildCount(new UiSelector().className(className));


}






// 在UiScrollable中通过className和instance查找


public static UiObject findFromUiScrollableByClassNameAndInstance(


UiScrollable uiScrollable, String className, int index)


throws UiObjectNotFoundException {


return uiScrollable.getChild(new UiSelector().className(className)


.index(index));


}






// 按className定位Scrollable


public static UiScrollable findScrollableByClass(String className) {


return new UiScrollable(new UiSelector().className(className));


}






// 按resource定位Scrollable


public static UiScrollable findScrollableByResource(String text) {


return new UiScrollable(new UiSelector().resourceId(text));


}






// 从UiScrollable得到子对象,通过className和instance


public static UiObject findChildFromUiScrollableByClassNameAndInstance(


UiScrollable scrollable, String className, int instance)


throws UiObjectNotFoundException {


return scrollable.getChild(new UiSelector().className(className)


.instance(instance));


}






// 从UiScrollable得到子对象,通过TEXT


public static UiObject findChildFromUiScrollableByText(


UiScrollable scrollable, String text)


throws UiObjectNotFoundException {


return scrollable.getChild(new UiSelector().text(text));


}






// 获得collection对象中的子元素个数,以className作为筛选标准


public static int findChildCountFromCollection(UiCollection collection,


String className) {


return collection.getChildCount(new UiSelector().className(className));


}






// 在UiScrollable中通过className查找


public static UiObject findFromUiScrollableByClassName(


UiScrollable uiScrollable, String className)


throws UiObjectNotFoundException {


return uiScrollable.getChild(new UiSelector().className(className));


}






// 通过resource查找UiCollection


public static UiCollection findUicollectionByResource(String text)


throws UiObjectNotFoundException {


UiCollection uiCollection = new UiCollection(


new UiSelector().resourceId(text));


return uiCollection;


}






// 通过test查找


public static UiObject findByText(String text)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().text(text));


return appBtn;


}






// 通过package查找


public static UiObject findByPackage(String text)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().packageName(text));


return appBtn;


}






// 通过description查找


public static UiObject findByDesc(String text)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().description(text));


return appBtn;


}






// 通过className查找


public static UiObject findByClassName(String className)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().className(className));


return appBtn;


}






// 通过className和index查找


public static UiObject findByClassNameAndIndex(String className, int index)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().className(className)


.index(index));


return appBtn;


}






// 通过className和text查找


public static UiObject findByClassNameAndText(String className, String text)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().className(className)


.text(text));


return appBtn;


}






// 通过descrice和index查找


public static UiObject findByDescContInstance(String text, int index)


throws UiObjectNotFoundException {


UiObject appBtn = new UiObject(new UiSelector().descriptionContains(


text).instance(index));


return appBtn;


}






// Sleep();


public static void Sleep(int ms) {


try {


Thread.sleep(ms);


} catch (InterruptedException e1) {


e1.printStackTrace();


}


}






// 进入APPS


public static boolean openApp(String appName)


throws UiObjectNotFoundException {






loginfo(TAG, "openApp :" + appName);


try {


UiObject appButton;


appButton = findByText(appName);






if (appButton.exists()) {


appButton.clickAndWaitForNewWindow();


} else {


UiObject appBtn = findByDesc(readResResource("ui_text_application"));


if (appBtn.exists()) {


appBtn.clickAndWaitForNewWindow();


appButton = findByClassNameAndText(


"android.widget.TextView", appName);


if (!appButton.exists()) {


UiSelector uiselector = new UiSelector();


UiScrollable uiscrollable = new UiScrollable(


uiselector.scrollable(true));


uiscrollable.setAsHorizontalList();






uiscrollable.flingToBeginning(5);






int count = 10;


if (!appButton.exists()) {


while (!appButton.exists() && count-- >= 0) {


uiscrollable.swipeLeft(50);


}


}


count = 10;


if (!appButton.exists()) {


while (!appButton.exists() && count-- >= 0) {


uiscrollable.swipeRight(50);


}


}


}


if (appButton.exists()) {


// System.out.println("------------------click");


appButton.clickAndWaitForNewWindow();


} else {


System.out.println("No Found " + appName + " in home");


return false;


}


} else {


appButton = findByClassNameAndText(


"android.widget.TextView", appName);


if (!appButton.exists()) {


UiSelector uiselector = new UiSelector();


UiScrollable uiscrollable = new UiScrollable(


uiselector.scrollable(true));


uiscrollable.setAsHorizontalList();






uiscrollable.flingToBeginning(5);






int count = 10;


if (!appButton.exists()) {


while (!appButton.exists() && count-- >= 0) {


uiscrollable.swipeLeft(50);


}


}


count = 10;


if (!appButton.exists()) {


while (!appButton.exists() && count-- >= 0) {


uiscrollable.swipeRight(50);


}


}


}


if (appButton.exists()) {


// System.out.println("------------------click");


appButton.clickAndWaitForNewWindow();


} else {


System.out


.println("Can't found Apps button,use api start activity!"


+ appName + "\n");


// openAppBypkgName(appName);


return false;


}


}


}






Sleep(2000);


} catch (Exception e) {


return false;


}






return true;






}






// 切换中英文


// public static void switchLanguage()throws UiObjectNotFoundException {


// UiObject appBtn =


// findByResourceId("android:id/action_bar_overlay_layout");


// appBtn.clickTopLeft();


// Sleep(2000);


// }






// 测试结果检查点


public static void checkPointForRsult(String msg) {


SimpleDateFormat format = new SimpleDateFormat("MM_dd_HH_mm_ss");


Date curDate = new Date(System.currentTimeMillis());


String time = format.format(curDate);


loginfo(TAG, "path_screenshot_result = " + path_screenshot_result);


if (new File(path_screenshot_result).exists() == false) {


boolean res = new File(path_screenshot_result).mkdirs();


loginfo(TAG, "mkdir return " + res);


}


File screenshot = new File(path_screenshot_result + msg + "_" + time


+ ".png");


UiDevice.getInstance().takeScreenshot(screenshot);


loginfo(TAG, "checkPointForRsult msg=" + msg);


}






// 测试检查点


public static void checkPoint(String msg, boolean statue) {


if (!statue) {


SimpleDateFormat format = new SimpleDateFormat("MM_dd_HH_mm_ss");


Date curDate = new Date(System.currentTimeMillis());


String time = format.format(curDate);


loginfo(TAG, "path_screenshot_fail = " + path_screenshot_fail);


if (new File(path_screenshot_fail).exists() == false) {


boolean res = new File(path_screenshot_fail).mkdirs();


loginfo(TAG, "mkdir return " + res);


}


File screenshot = new File(path_screenshot_fail + msg + "_" + time


+ ".png");


UiDevice.getInstance().takeScreenshot(screenshot);


loginfo(TAG, "checkPoint msg=" + msg);


assertTrue(msg, statue);


}


}






public static void checkPoint(String msg, boolean statue,


UiObjectNotFoundException e) {


if (!statue) {


loginfo(TAG, msg, e);


checkPoint(msg, statue);


}


}






/*


* 修改语言输入法 输入法选择:启用【谷歌拼音输入法】\启用【Android 键盘 (AOSP)】


*/


/*


* public static void changeInputMethod(String inputMethodName) throws


* UiObjectNotFoundException { if


* (UiUtil.openApp(readResResource("ui_text_setting"))) { UiObject


* languageAndInputMethodItem = new UiObject( new


* UiSelector().text(readResResource("ui_text_lanuage_input"))); if


* (languageAndInputMethodItem.exists()) { UiObject myDeviceTab = new


* UiObject( new UiSelector().text(readResResource("ui_text_device")));


* myDeviceTab.click();


* languageAndInputMethodItem.clickAndWaitForNewWindow(); UiScrollable


* languageAndInputMethodList = new UiScrollable( new


* UiSelector().className("android.widget.ListView")); int count =


* languageAndInputMethodList .getChildCount(new UiSelector()


* .className("android.widget.LinearLayout")); UiObject childCheckBox1 =


* null; UiObject childCheckBox2 = null; UiObject chooseItem = null; for


* (int i = 0; i < count; i++) { UiObject item = languageAndInputMethodList


* .getChildByInstance(new UiSelector()


* .className("android.widget.LinearLayout"), i); // 启用【谷歌拼音输入法】 UiObject


* childTextView1 = item.getChild(new UiSelector()


* .text(readResResource("ui_text_input_google")));





* if (childTextView1.exists()) { childCheckBox1 = item.getChild(new


* UiSelector() .className("android.widget.CheckBox")); if


* (!childCheckBox1.isChecked()) { childCheckBox1.click(); } } // 启用【Android


* 键盘 (AOSP)】 UiObject childTextView2 = item.getChild(new UiSelector()


* .text("Android 键盘 (AOSP)"));





* if (childTextView2.exists()) { childCheckBox2 = item.getChild(new


* UiSelector() .className("android.widget.CheckBox")); if


* (!childCheckBox2.isChecked()) { childCheckBox2.click(); } } // 选择输入法


* UiObject childTextView3 = item.getChild(new UiSelector()


* .text(readResResource("ui_text_default"))); if (childTextView3.exists())


* { chooseItem = childTextView3; } } if (childCheckBox1 != null &&


* childCheckBox2 != null && chooseItem != null) {


* chooseItem.clickAndWaitForNewWindow(); UiObject choose = new UiObject(


* new UiSelector().text(inputMethodName));


* choose.clickAndWaitForNewWindow(); } } } }


*/


/*


* 测试当前输入法是否为英文 参数:UiObject 默认字符串(如地址栏默认包含http://) 返回:英文true,其他false


*/


public static boolean testInputIsEng(UiObject ob, String str)


throws UiObjectNotFoundException {


String s = ob.getText();


if (!s.equals(str)) {


return true;


} else {


return false;


}


}






/*


* 在定位到输入框的情况下,该方法在输入时更换输入法


*/


/*


* public static void changeInputMethodByShotCut(String inputMethodName,


* UiDevice uiDevice) throws UiObjectNotFoundException {


* uiDevice.drag(uiDevice.getDisplayWidth() / 2, 0,


* uiDevice.getDisplayWidth() / 2, uiDevice.getDisplayHeight(), 10);


* UiUtil.Sleep(2000); UiObject chooseItem = new UiObject(new


* UiSelector().text(readResResource("ui_text_input_sel")));


* chooseItem.clickAndWaitForNewWindow(); UiUtil.Sleep(1000); UiObject


* choose = new UiObject(new UiSelector().text(inputMethodName));


* choose.clickAndWaitForNewWindow(); }


*/


/*


* 点亮屏幕并解锁手机


*/


public static void onScreen() throws UiObjectNotFoundException {


System.out.print("onScreen android version:" + Build.VERSION.SDK_INT


+ "\n");


if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {


onScreenAndroidL();


} else {


try {


if (!UiDevice.getInstance().isScreenOn()) {


UiDevice.getInstance().pressKeyCode(26);


}






UiObject lockKey = findByResourceId("com.android.keyguard:id/keyguard_selector_view_frame");


if (lockKey.exists()) {


int left = lockKey.getBounds().left;


int right = lockKey.getBounds().right;


int top = lockKey.getBounds().top;


int bottom = lockKey.getBounds().bottom;


int x = (left + right) / 2;


int y = (top + bottom) / 2;


UiDevice.getInstance().drag(x, y, right, y, 10);


} else {


System.out.print("No Found lock Key\n");


}


} catch (RemoteException e) {


// TODO Auto-generated catch block


e.printStackTrace();


}


}


}






// ningbiao


public static void onScreenAndroidL() throws UiObjectNotFoundException {


try {


if (!UiDevice.getInstance().isScreenOn()) {


UiDevice.getInstance().pressKeyCode(26);


}






UiObject lockKey = findByResourceId("com.android.systemui:id/lock_icon");


if (lockKey.exists()) {


int w = UiDevice.getInstance().getDisplayWidth();


int h = UiDevice.getInstance().getDisplayHeight();


lockKey.dragTo(w / 2, h / 2, 10);


} else {


System.out.print("No Found lock Key\n");


}


} catch (RemoteException e) {


// TODO Auto-generated catch block


e.printStackTrace();


}


}






// 进入设置中改为谷歌输入法


public static void switchLan() throws UiObjectNotFoundException {


UiDevice.getInstance().pressHome();


UiUtil.openApp(readResResource("ui_text_setting"));






UiScrollable list = new UiScrollable(new UiSelector().scrollable(true));


list.setAsVerticalList();


UiObject item = new UiObject(


new UiSelector().text(readResResource("ui_text_lanuage_input")));


while (!item.exists()) {


list.flingForward();


}


item.clickAndWaitForNewWindow();


UiObject choose = UiUtil


.findByText(readResResource("ui_text_input_google"));


if (choose.exists() && !choose.isChecked() && choose.isCheckable()) {


choose.click();


UiUtil.Sleep(1000);


}


UiDevice.getInstance().pressHome();


}






// 输入的过程中将输入法更改为英文输入法(搜索联系人界面)


public static void switchLanguage() throws UiObjectNotFoundException {


UiDevice uiDevice = UiDevice.getInstance();


uiDevice.drag(uiDevice.getDisplayWidth() / 2, 0,


uiDevice.getDisplayWidth() / 2, uiDevice.getDisplayHeight(), 10);


UiUtil.Sleep(2000);


UiObject chooseItem = new UiObject(


new UiSelector().text(readResResource("ui_text_input_sel")));


chooseItem.clickAndWaitForNewWindow();


UiUtil.Sleep(2000);


UiObject choose = UiUtil.findByText(readResResource("ui_text_english"));


if (choose.exists())


choose.clickAndWaitForNewWindow();


UiUtil.Sleep(1000);


}






// 点击双卡弹出的提示,0为SIM1,1为SIM2


public static UiObject click_sim_byid(String first, String second, int sim)


throws UiObjectNotFoundException {


// TODO Auto-generated method stub


UiObject ab = new UiCollection(new UiSelector().className(first).index(


sim)).getChild(new UiSelector().resourceId(second));


return ab;


}






// 长按坐标点


public static void longclick(UiObject object)


throws UiObjectNotFoundException {


int x = (object.getBounds().left + object.getBounds().right) / 2;


int y = (object.getBounds().top + object.getBounds().bottom) / 2;


UiDevice.getInstance().drag(x, y, x, y, 20);


}






// 下拉通知栏 ,进入


public static void downScreen() throws UiObjectNotFoundException {


int xLocation;


int yLocation;


xLocation = UiDevice.getInstance().getDisplayWidth() / 2;


yLocation = UiDevice.getInstance().getDisplayHeight() / 2;


UiDevice.getInstance().swipe(xLocation, 0, xLocation, yLocation, 10);


}






// 清除后台


public static void clearBackgroundApps() throws UiObjectNotFoundException {


loginfo(TAG, "clearBackgroundApps");


try {


UiDevice.getInstance().pressRecentApps();


Sleep(5000);


UiObject clearBtn = findByResourceId(readResResource("ui_resid_recent_sprdramopt_view"));


if (clearBtn.exists()) {


clearBtn.click();


} else {


clearBtn = findByResourceId(readResResource("ui_resid_recent_dismiss"));


int count = 50;


while (clearBtn.exists() && count-- >= 0) {


clearBtn.click();


Sleep(2000);


}


}


pressHome();


Sleep(1000);


} catch (Exception e) {


// TODO Auto-generated catch block


e.printStackTrace();


}






pressHome();


}






// 调节音量


public static void adjustVolume() throws UiObjectNotFoundException {


for (int i = 0; i < 10; i++) {


UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_VOLUME_UP);


UiUtil.Sleep(1000);


}


UiUtil.Sleep(5000);


for (int j = 0; j < 8; j++) {


UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_VOLUME_DOWN);


UiUtil.Sleep(1000);


}


UiUtil.Sleep(3000);






}






// 横竖屏旋转


public void gsensor() throws UiObjectNotFoundException, RemoteException {


UiDevice.getInstance().setOrientationLeft();


sleep(5000);


UiDevice.getInstance().setOrientationRight();


sleep(5000);


UiDevice.getInstance().setOrientationNatural();


sleep(5000);


}






// 保证正常退出应用


public static void goHome() throws UiObjectNotFoundException {


for (int i = 0; i < 5; i++) {


if (checkInLauncher()) {


loginfo(TAG, "Already in launcher!");


break;


}


pressBack();


Sleep(200);


}


pressHome();


}






public static void pressHome() throws UiObjectNotFoundException {


UiDevice.getInstance().pressHome();


}






public static void pressBack() throws UiObjectNotFoundException {


UiDevice.getInstance().pressBack();


}






public static void openNotification() throws UiObjectNotFoundException {


UiDevice.getInstance().openNotification();


}






public static void pressMenu() throws UiObjectNotFoundException {


UiDevice.getInstance().pressMenu();


}






public static void pressEnter() throws UiObjectNotFoundException {


UiDevice.getInstance().pressEnter();


}






public static void pressDPadUp() throws UiObjectNotFoundException {


UiDevice.getInstance().pressDPadUp();


}






public static void pressDPadDown() throws UiObjectNotFoundException {


UiDevice.getInstance().pressDPadDown();


}






public static void pressDPadLeft() throws UiObjectNotFoundException {


UiDevice.getInstance().pressDPadLeft();


}






public static void pressDPadRight() throws UiObjectNotFoundException {


UiDevice.getInstance().pressDPadRight();


}






public static boolean isScreenOn() throws RemoteException {


return UiDevice.getInstance().isScreenOn();


}






public static void openQuickSettings() throws UiObjectNotFoundException {


UiDevice.getInstance().openQuickSettings();


}






// 检查所有进入应用是否正确


public static void checkAppView(String name)


throws UiObjectNotFoundException {


if (name.equals(readResResource("ui_text_dial"))


|| name.equals(readResResource("dial_text_app_dial"))) {


UiObject dialBtn = findByResourceId(readResResource("dial_resid_dialpad_button"));


checkPoint("enter call fail ", dialBtn.exists());


} else if (name.equals(readResResource("ui_text_contact"))


|| name.equals(readResResource("contact_text_app_name_contacts"))) {


UiObject pb = findByDesc(readResResource("ui_text_contact_all"));


boolean contactsText = checkObjectExistsByText(name);


checkPoint("enter pb fail ", pb.exists() || contactsText);


} else if (name.equals(readResResource("ui_text_message"))) {


UiObject message = findByResourceIdAndText(


"android:id/action_bar_title",


readResResource("ui_text_message"));


boolean messageTitle = checkObjectExistsByText(readResResource("mms_text_app_name"));


checkPoint("enter message fail ", message.exists() || messageTitle);


} else if (name.equals(readResResource("ui_text_setting"))) {


UiObject setting = findByText(readResResource("ui_text_setting"));


checkPoint("enter setting fail ", setting.exists());


} else if (name.equals(readResResource("ui_text_calculator"))) {


UiObject calculate = findByResourceIdAndText(


"com.android.calculator2:id/del",


readResResource("ui_text_back"));


checkPoint("enter calculate fail ", calculate.exists());


} else if (name.equals(readResResource("ui_text_calendar"))) {


UiObject data = findByResourceIdAndDesc(


"com.android.calendar:id/action_today",


readResResource("ui_text_today"));


checkPoint("enter data fail ", data.exists());


} else if (name.equals(readResResource("ui_text_camera"))) {


UiObject camera = findByResourceId("com.android.camera2:id/filmstrip_bottom_controls");


UiObject notice = findByText(readResResource("ui_text_remember_address"));


boolean overlay = checkObjectExistsByID("com.android.camera2:id/mode_options_overlay");


checkPoint("enter camera fail ",


(camera.exists() || notice.exists() || overlay));


} else if (name.equals(readResResource("ui_text_clock"))) {


UiObject clock = findByResourceIdAndText(


"com.android.deskclock:id/tab_text",


readResResource("ui_text_alarm"));


checkPoint("enter clock fail ", clock.exists());


} else if (name.equals(readResResource("ui_text_gallary"))) {


UiObject picture = findByResourceId("com.android.gallery3d:id/gl_root_view");


checkPoint("enter picture fail ", picture.exists());


} else if (name.equals(readResResource("ui_text_video"))) {


UiObject video = findByResourceIdAndText("android:id/text1",


readResResource("ui_text_video"));


checkPoint("enter video fail", video.exists());


} else if (name.equals(readResResource("ui_text_music"))) {


UiObject music = findById(readResResource("music_resid_artisttab"));


checkPoint("enter music fail ", music.exists());


} else if (name.equals(readResResource("ui_text_record"))) {


UiObject recorder = findByText(readResResource("ui_text_save_record"));


checkPoint("enter recorder fail ", recorder.exists());


} else if (name.equals(readResResource("ui_text_playstore"))) {


UiObject addaccount = findByText(readResResource("playstore_add_account"));


UiObject confirm = findByText(readResResource("browser_text_ok"));


UiObject googleplay = findByResourceId("com.android.vending:id/search_box_idle_text");


checkPoint("enter playstore fail ", addaccount.exists() || confirm.exists() || googleplay.exists());


} else if (name.equals(readResResource("ui_text_fm"))) {


Sleep(3000);


UiObject storeBtn = findByText(readResResource("fm_text_save_channel"));


UiObject searchBtn = findByText(readResResource("fm_text_search"));


UiObject fm = findByText(readResResource("ui_text_fm"));


UiObject fm1 = findByText(readResResource("fm_text_airplane_warn"));


UiObject fm2 = findByText(readResResource("fm_text_earphone_warn"));


checkPoint(


"enter fm fail ",


(fm.exists() || fm1.exists() || fm2.exists()


|| storeBtn.exists() || searchBtn.exists()));


} else {


loginfo(TAG, "Wrong app name:" + name);


// checkPoint("Wrong app name:" + name, false);


}


}






/*


* 进入某文件夹的某个文件


*/


public void openAppFloder(String floder, String name)


throws UiObjectNotFoundException {


UiDevice.getInstance().pressHome();


UiDevice.getInstance().pressHome();


sleep(1000);


UiObject obj = new UiObject(new UiSelector().text(floder));// 文件夹名


UiObject name1 = new UiObject(new UiSelector().text(name));


for (int i = 0; i < 3; i++) {


if (obj.exists()) {


obj.clickAndWaitForNewWindow();


name1.clickAndWaitForNewWindow();


break;


}


getUiDevice();


UiDevice.getInstance().drag(421, 694, 50, 694, 5);


sleep(1000);


obj = new UiObject(new UiSelector().text(name));


}


}






// 打开文件


public static void openFloder(String name) throws UiObjectNotFoundException {


System.out.println("switch to TF card");


UiObject CheckedTextView = UiUtil


.findByClassName("android.widget.CheckedTextView");


CheckedTextView.clickAndWaitForNewWindow();


UiObject storage = UiUtil


.findByText(readResResource("foldermgr_text_switch_to_tf"));


storage.clickAndWaitForNewWindow();


UiScrollable scrollable = new UiScrollable(new UiSelector().resourceId(


"com.sprd.fileexplorer:id/detailed_file_list").scrollable(true));


scrollable.setAsVerticalList();


UiObject file = UiUtil.findByText(name);


while (!file.exists()) {


boolean fling = scrollable.scrollForward();


if (fling == false) {


break;


}


}


if (file.exists()) {


file.clickAndWaitForNewWindow();


// sleep(2000);


} else {


System.out.println(name + "file not exist");


UiUtil.goHome();


}


}






// 获取命令并执行 ,返回0表示执行成功


public static void exeCommand(String command) throws IOException {


Runtime runtime = Runtime.getRuntime();


Process proc = runtime.exec(command);


UiUtil.Sleep(3000);


try {


if (proc.waitFor() != 0) {


System.err.println("exit value = " + proc.exitValue());


}


BufferedReader in = new BufferedReader(new InputStreamReader(


proc.getInputStream()));


StringBuffer stringBuffer = new StringBuffer();


String line = null;


while ((line = in.readLine()) != null) {


stringBuffer.append(line + " ");


}


System.out.println(stringBuffer.toString());


} catch (InterruptedException e) {


System.err.println(e);


UiUtil.checkPoint("ping error", false);


} finally {


try {


proc.destroy();


} catch (Exception e2) {


}


}


}






// 长按物理键


public static boolean longPressKeyCode(int keyCode) {


try {


Object deviceObj = UiDevice.getInstance();


Field mUiAutomationBridge = Class.forName(


"com.android.uiautomator.core.UiDevice").getDeclaredField(


"mUiAutomationBridge");


mUiAutomationBridge.setAccessible(true);


Object bridgeObj = mUiAutomationBridge.get(deviceObj);


Method injectInputEvent = Class.forName(


"com.android.uiautomator.core.UiAutomatorBridge")


.getDeclaredMethod(


"injectInputEvent",


new Class[] { android.view.InputEvent.class,


boolean.class });


final long eventTime = SystemClock.uptimeMillis();


KeyEvent downEvent = new KeyEvent(eventTime, eventTime,


KeyEvent.ACTION_DOWN, keyCode, 0, 0,


KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0,


InputDevice.SOURCE_KEYBOARD);


if ((Boolean) injectInputEvent.invoke(bridgeObj, new Object[] {


downEvent, true })) {


SystemClock.sleep(500);


for (int repetition = 0; repetition < 10; repetition++) {


KeyEvent newEvent = KeyEvent.changeTimeRepeat(downEvent,


SystemClock.uptimeMillis(), repetition,


downEvent.getFlags() | KeyEvent.FLAG_LONG_PRESS);


injectInputEvent.invoke(bridgeObj, new Object[] { newEvent,


true });


SystemClock.sleep(5);


}


KeyEvent upEvent = new KeyEvent(eventTime, eventTime,


KeyEvent.ACTION_UP, keyCode, 0, 0,


KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0,


InputDevice.SOURCE_KEYBOARD);


if ((Boolean) injectInputEvent.invoke(bridgeObj, new Object[] {


upEvent, true })) {


return true;


}


}






} catch (NoSuchMethodException e) {


Log.d("TAG", e.getMessage());


} catch (ClassNotFoundException e) {


Log.d("TAG", e.getMessage());


} catch (InvocationTargetException e) {


Log.d("TAG", e.getMessage());


} catch (IllegalAccessException e) {


Log.d("TAG", e.getMessage());


} catch (SecurityException e) {


e.printStackTrace();


} catch (NoSuchFieldException e) {


e.printStackTrace();


}


return false;


}






/*


* 按power键,灭屏,锁屏


*/


public static void offScreen() throws UiObjectNotFoundException {


try {


if (UiDevice.getInstance().isScreenOn()) {


UiDevice.getInstance().pressKeyCode(26);


UiUtil.Sleep(2000);


}


} catch (RemoteException e) {


// TODO Auto-generated catch block


e.printStackTrace();


}


}






// 判断一个字符串是否都为数字


public static boolean isDigit(String strNum) {


return strNum.matches("[0-9]{1,}");


}






/*


* 获取XML文件节点 参数:文件名,节点名,属性名 返回:字符串数组


*/






public static String[] getXmlValue(String file, String value, String attr) {


try {


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();


DocumentBuilder builder = dbf.newDocumentBuilder();


Document doc = builder.parse("file:///data//local//tmp//" + file); // 获取到xml文件


String s;


XPathFactory factory = XPathFactory.newInstance();


XPath xpath = factory.newXPath();


XPathExpression expr = xpath.compile("//" + value); // 获取节点名称


NodeList nodes = (NodeList) expr.evaluate(doc,


XPathConstants.NODESET);


String sp[] = new String[nodes.getLength()];


for (int i = 0; i < nodes.getLength(); i++) {


Node nd = nodes.item(i);


s = nd.getAttributes().getNamedItem(attr).getTextContent();


sp[i] = s;


}


return sp;


} catch (XPathExpressionException e) {


e.printStackTrace();


} catch (ParserConfigurationException e) {


e.printStackTrace();


} catch (SAXException e) {


e.printStackTrace();


} catch (IOException e) {


e.printStackTrace();


}


return null;


}






public static String readConfig(String tagname) {


return readJson(tagname);


}






// 读取XML文件参数


public static String readXml(String tagname) {


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();


try {


String folder = RES_CONFIG_FOLER_CASE;


if (!new File("/data/local/tmp/" + folder).exists()) {


folder = ".";


}


DocumentBuilder builder = dbf.newDocumentBuilder();


Document doc = builder.parse("file:///data//local//tmp//" + folder


+ "//config.xml");


doc.normalize();


NodeList node = doc.getElementsByTagName(tagname);


String result = node.item(0).getTextContent();


return result;


} catch (ParserConfigurationException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


} catch (SAXException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


} catch (IOException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


}


}






// 文件名,TAG名来读取XML文件参数


public static String readXml(String fileName, String tagname) {


loginfo(TAG, "readXml fileName=" + fileName + ",tagname=" + tagname);


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();


try {


String folder = RES_CONFIG_FOLER_CASE;


if (!new File("/data/local/tmp/" + folder).exists()) {


folder = ".";


}


DocumentBuilder builder = dbf.newDocumentBuilder();


Document doc = builder.parse("file:///data//local//tmp//" + folder


+ "//" + fileName + ".xml");


doc.normalize();


NodeList node = doc.getElementsByTagName(tagname);


String result = node.item(0).getTextContent();


return result;


} catch (ParserConfigurationException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


} catch (SAXException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


} catch (IOException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


}


}






private static final int s_config_total_size = 5 * 1024 * 1024;


private static JSONObject s_json_config = null;


private static final String s_config_main_tag = "config";


private static final String s_config_value_tag = "value";


private static final String s_config_id_tag = "id";






private static String readJson(String tagname) {


if (s_json_config == null) {


try {


FileInputStream fis = new FileInputStream(new File(


RES_CONFIG_PATH + "config.json"));


int iLen = fis.available();


loginfo(TAG, "iLen = " + iLen);


if (iLen <= 0 || iLen >= s_config_total_size) {


fis.close();


loginfo(TAG, "read json fail: iLen = " + iLen);


return readXml(tagname);


}


int num = 0;


char[] cbuf = new char[1024];


StringBuilder sb = new StringBuilder(iLen + 1);


InputStreamReader isReader = new InputStreamReader(fis);


while ((num = isReader.read(cbuf)) > 0) {


sb.append(cbuf);


}


loginfo(TAG, "buff: " + sb.toString());


s_json_config = new JSONObject(sb.toString());


isReader.close();


} catch (Exception e) {


loginfo(TAG, "read json fail:  " + e.getMessage());


return readXml(tagname);


}


}






try {


String content = s_json_config.getString(s_config_main_tag);


JSONArray jsonArray = new JSONArray(content);


for (int i = 0; i < jsonArray.length(); i++) {


String param = jsonArray.getString(i);


JSONObject obj = new JSONObject(param);


if (obj.getString(s_config_id_tag).equals(tagname)) {


String value = obj.getString(s_config_value_tag);


loginfo(TAG, "tagname = " + tagname + ", value = " + value);


return value;


}


}


} catch (Exception e) {


}






loginfo(TAG, "read json fail: can't find " + tagname


+ " in config.json");


return readXml(tagname);


}






// 读取XML文件参数


public static String readRes(int res, String tagname) {


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();


String filename = null;


if (res == RES_CONFIG) {


filename = RES_CONFIG_FILE;


} else if (res == RES_RESOURCE) {


filename = RES_RESOURCE_FILE;


} else {


return null;


}


try {


String folder = RES_CONFIG_FOLER_CASE;


if (!new File("/data/local/tmp/" + folder).exists()) {


folder = ".";


}






DocumentBuilder builder = dbf.newDocumentBuilder();


Document doc = builder.parse("file:///data//local//tmp//" + folder


+ "//" + filename);


doc.normalize();


NodeList node = doc.getElementsByTagName(tagname);


String result = node.item(0).getTextContent();


return result;


} catch (ParserConfigurationException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


} catch (SAXException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


} catch (IOException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


}


}






// 删除文件


/**


* @Title: deleteFloder


* @Description: 通过文件管理器删除文件/文件夹


* @param String


*            name


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public static void deleteFloder(String name)


throws UiObjectNotFoundException {


UiObject fileexplorer = UiUtil.findByPackage("com.sprd.fileexplorer");


if (!fileexplorer.exists()) {


openApp(readResResource("ui_text_foldermanager"));


}


System.out.println("switch to tf card");


UiObject CheckedTextView = UiUtil


.findByClassName("android.widget.CheckedTextView");


CheckedTextView.clickAndWaitForNewWindow();


UiObject storage = UiUtil


.findByText(readResResource("foldermgr_text_switch_to_tf"));


storage.clickAndWaitForNewWindow();


UiScrollable scrollable = new UiScrollable(new UiSelector().resourceId(


"com.sprd.fileexplorer:id/detailed_file_list").scrollable(true));


scrollable.setAsVerticalList();


UiObject file = UiUtil.findByText(name);


try {


scrollable.flingBackward();


scrollable.flingBackward();


} catch (Exception e) {


// TODO: handle exception


}


int i = 0;


while (!file.exists()) {


UiDevice.getInstance().pressDPadDown();


i++;


if (i == 50) {


break;


}


}


file = UiUtil.findByText(name);


if (file.exists()) {


UiDevice.getInstance().pressDPadDown();


UiUtil.Sleep(1000);


UiObject floder = UiUtil.findByText(name);


longclick(floder);


UiUtil.Sleep(2000);


UiObject delete = UiUtil


.findByText(readResResource("button_text_delete"));


delete.clickAndWaitForNewWindow();


UiObject confirm = UiUtil


.findByText(readResResource("button_text_ok"));


confirm.clickAndWaitForNewWindow();


UiUtil.Sleep(3000);


} else {


System.out.println(name + "file not exist");


}


}






// ningbiao


/**


* @Title: setPreferredNetworkType


* @Description: 设置首选网络


* @param CALL_SIM_TYPE


*            sim_TYPE


* @param PREFERRED_NETWORK_TYPE


*            network_TYPE


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void setPreferredNetworkType(CALL_SIM_TYPE sim_TYPE,


PREFERRED_NETWORK_TYPE network_TYPE)


throws UiObjectNotFoundException {


openApp(UiUtil.readResResource("ui_text_setting"));


sleep(1000);






UiObject more = new UiObject(new UiSelector().className(


"android.widget.TextView").textContains(


UiUtil.readResResource("settings_text_more")));


if (more.exists()) {


more.clickAndWaitForNewWindow();






UiObject mobile_network = new UiObject(new UiSelector().className(


"android.widget.TextView").text(


UiUtil.readResResource("settings_text_mobile_networks")));


mobile_network.clickAndWaitForNewWindow();






if (sim_TYPE == CALL_SIM_TYPE.SIM1) {


UiObject setting_sim1 = new UiObject(


new UiSelector()


.className("android.widget.TextView")


.text(UiUtil


.readResResource("settings_text_mobile_networks_sim1")));


if (setting_sim1.exists()) {


setting_sim1.clickAndWaitForNewWindow();


} else {


System.out


.print("SIM1 Mobile Network settings did't exists!");


}


} else if (sim_TYPE == CALL_SIM_TYPE.SIM2) {


UiObject setting_sim2 = new UiObject(


new UiSelector()


.className("android.widget.TextView")


.text(UiUtil


.readResResource("settings_text_mobile_networks_sim2")));


if (setting_sim2.exists()) {


setting_sim2.clickAndWaitForNewWindow();


} else {


System.out


.print("SIM2 Mobile Network settings did't exists!");


}


} else {


System.out.print("SIM type error!");


}






UiObject preferred_network = new UiObject(


new UiSelector()


.className("android.widget.TextView")


.text(UiUtil


.readResResource("settings_text_preferred_network_type")));


if (preferred_network.exists()) {


preferred_network.clickAndWaitForNewWindow();


}






String typeText = "Auto";


switch (network_TYPE) {


case AUTO:


typeText = UiUtil


.readResResource("settings_preferred_text_auto");


break;


case GSM_ONLY:


typeText = UiUtil


.readResResource("settings_preferred_text_gsm_only");


break;


case LTE_ONLY:


typeText = UiUtil


.readResResource("settings_preferred_text_lte_only");


break;


case TD_ONLY:


typeText = UiUtil


.readResResource("settings_preferred_text_td_only");


break;


case WCDMA_ONLY:


typeText = UiUtil


.readResResource("settings_preferred_text_wcdma_only");


break;






default:


break;


}






UiObject checked_option = new UiObject(new UiSelector().className(


"android.widget.CheckedTextView").text(typeText));


if (checked_option.exists()) {


checked_option.clickAndWaitForNewWindow();


sleep(3000);


} else {


System.out.print("Has't Preferred network type options!");


}


} else {


System.out.print("Has't more button!");


}


}






// ningbiao


/**


* @Title: openMoreOptionsMenu


* @Description: 打开menu菜单


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public static void openMoreOptionsMenu() throws UiObjectNotFoundException {


UiObject moreOptionsButton = new UiObject(new UiSelector()


.className("android.widget.ImageButton")


.description(UiUtil.readResResource("menu_text_more_option"))


.instance(0));


if (moreOptionsButton.exists()) {


moreOptionsButton.clickAndWaitForNewWindow();


} else {


UiDevice.getInstance().pressMenu();


}


}






// ningbiao


/**


* @Title: updateLanguage


* @Description: 切换系统语言


* @param Locale


*            locale


* @param


* @param


* @return


* @throws


*/


public static void updateLanguage(Locale locale) {


Log.d("ANDROID_LAB", locale.toString());


try {


Object objIActMag, objActMagNative;


Class clzIActMag = Class.forName("android.app.IActivityManager");


Class clzActMagNative = Class


.forName("android.app.ActivityManagerNative");


Method mtdActMagNative$getDefault = clzActMagNative


.getDeclaredMethod("getDefault");


// IActivityManager iActMag = ActivityManagerNative.getDefault();


objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);


// Configuration config = iActMag.getConfiguration();


Method mtdIActMag$getConfiguration = clzIActMag


.getDeclaredMethod("getConfiguration");


Configuration config = (Configuration) mtdIActMag$getConfiguration


.invoke(objIActMag);


config.locale = locale;


// iActMag.updateConfiguration(config);


// 此处�?��声明权限:android.permission.CHANGE_CONFIGURATION


// 会重新调�?onCreate();


Class[] clzParams = { Configuration.class };


Method mtdIActMag$updateConfiguration = clzIActMag


.getDeclaredMethod("updateConfiguration", clzParams);


mtdIActMag$updateConfiguration.invoke(objIActMag, config);


} catch (Exception e) {


e.printStackTrace();


}


}






// ningbiao


/**


* @Title: openFloderEn


* @Description: 从文件管理器中打开某一个文件夹


* @param String


*            name


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void openFloderEn(String name) throws UiObjectNotFoundException {


UiObject CheckedTextView = findByClassName("android.widget.CheckedTextView");


CheckedTextView.clickAndWaitForNewWindow();


UiObject storage = findByText(UiUtil


.readResResource("fileexplorer_text_external_storage"));


if (!storage.exists()) {


storage = findByText(UiUtil


.readResResource("fileexplorer_text_internal_storage"));


}


storage.clickAndWaitForNewWindow();


UiScrollable scrollable = new UiScrollable(new UiSelector().resourceId(


"com.sprd.fileexplorer:id/detailed_file_list").scrollable(true));


scrollable.setAsVerticalList();


UiObject file = findByText(name);


while (!file.exists()) {


boolean fling = scrollable.scrollForward();


if (fling == false) {


break;


}


}


if (file.exists()) {


file.clickAndWaitForNewWindow();


// sleep(2000);


} else {


System.out.println(name + "File is not exists!");


}


}






// ningbiao


/**


* @Title: findByPackageName


* @Description: 通过包名获取对象


* @param String


*            packageName


* @param


* @param


* @return UiObject


* @throws


*/


public static UiObject findByPackageName(String packageName) {


return new UiObject(new UiSelector().packageName(packageName));


}






/**


* @Title: deleteFloderCamera


* @Description: 删除DCIM中的Camera文件夹


* @param String


*            floderName


* @param String


*            storageName


* @param


* @return


* @throws UiObjectNotFoundException


*/


public static void deleteFloderCamera(String floderName, String storageName)


throws UiObjectNotFoundException {


UiObject fileexplorer = findByPackageName("com.sprd.fileexplorer");


if (!fileexplorer.exists()) {


openApp(UiUtil.readResResource("fileexplorer_text_app_name"));


}


UiObject CheckedTextView = findByClassName("android.widget.CheckedTextView");


CheckedTextView.clickAndWaitForNewWindow();


UiObject storage = findByText(storageName);


if (!storage.exists()) {


storage = findByText(UiUtil


.readResResource("fileexplorer_text_external_storage"));


if (!storage.exists()) {


storage = findByText(UiUtil


.readResResource("fileexplorer_text_internal_storage"));


}


}


storage.clickAndWaitForNewWindow();


UiScrollable scrollable = new UiScrollable(new UiSelector().resourceId(


"com.sprd.fileexplorer:id/detailed_file_list").scrollable(true));


scrollable.setAsVerticalList();


UiObject file = findByText(floderName);


try {


scrollable.flingBackward();


scrollable.flingBackward();


} catch (Exception e) {


// TODO: handle exception


}






int i = 0;


while (!file.exists()) {


UiDevice.getInstance().pressDPadDown();


i++;


if (i == 50) {


break;


}


}


file = findByText(floderName);


if (file.exists()) {


UiDevice.getInstance().pressDPadDown();


UiUtil.Sleep(1000);


UiObject floder = findByText(floderName);


// longclick(floder);


floder.clickAndWaitForNewWindow();


UiUtil.Sleep(1000);






// delete Camera floder


scrollable = new UiScrollable(new UiSelector().resourceId(


"com.sprd.fileexplorer:id/detailed_file_list").scrollable(


true));


scrollable.setAsVerticalList();


file = findByText("Camera");


try {


scrollable.flingBackward();


scrollable.flingBackward();


} catch (Exception e) {


// TODO: handle exception


}






i = 0;


while (!file.exists()) {


UiDevice.getInstance().pressDPadDown();


i++;


if (i == 50) {


break;


}


}


if (file.exists()) {


UiDevice.getInstance().pressDPadDown();


UiUtil.Sleep(1000);


longclick(file);


UiUtil.Sleep(1000);






UiObject delete = findByText(UiUtil


.readResResource("button_text_delete"));


delete.clickAndWaitForNewWindow();


UiObject confirm = findByText(UiUtil


.readResResource("button_text_ok"));


confirm.clickAndWaitForNewWindow();


UiUtil.Sleep(2000);


} else {


System.out.println(floderName + "Camera floder is not exists!");


}


} else {


System.out.println(floderName + "File is not exists!");


}


}






// ningbiao


/**


* @Title: destotyAll


* @Description: 清除所有后台程序


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void destotyAll() throws UiObjectNotFoundException {


if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {


clearBackgroundApps();


} else {


try {


UiDevice.getInstance().pressRecentApps();


UiObject recent_sprdramopt_view = new UiObject(


new UiSelector()


.resourceId("com.android.systemui:id/recent_sprdramopt_view"));


if (recent_sprdramopt_view.exists()) {


recent_sprdramopt_view.clickAndWaitForNewWindow();


}


goHome();


} catch (RemoteException e) {


// TODO Auto-generated catch block


e.printStackTrace();


}


}


}






// ningbiao


/**


* @Title: execCommand


* @Description: 执行命令


* @param String


*            command


* @param


* @param


* @return


* @throws IOException


*/


public static void execCommand(String command) throws IOException {


Runtime runtime = Runtime.getRuntime();


Process proc = runtime.exec(command);


try {


if (proc.waitFor() != 0) {


System.err.println("exit value = " + proc.exitValue());


}


BufferedReader in = new BufferedReader(new InputStreamReader(


proc.getInputStream()));


StringBuffer stringBuffer = new StringBuffer();


String line = null;


while ((line = in.readLine()) != null) {


stringBuffer.append(line + " ");


}


System.out.println(stringBuffer.toString());


} catch (InterruptedException e) {


System.err.println(e);


} finally {


try {


proc.destroy();


} catch (Exception e2) {


}


}


}






// ningbiao


public static String readResResource(String tagname) {


return readResWithLocale(RES_RESOURCE, tagname);


}






/**


* @Title: readResWithLocale


* @Description: 通过tag,获取资源文件中(xml)的内容


* @param int res


* @param String


*            tagname


* @param


* @return String


* @throws


*/


public static String readResWithLocale(int res, String tagname) {


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();


Locale locale = getCurretnLocale();


String filename = null;


if (res == RES_CONFIG) {


filename = RES_CONFIG_FILE;


} else if (res == RES_RESOURCE) {


if (locale.equals(Locale.ENGLISH) || locale.equals(Locale.UK)


|| locale.equals(Locale.US)) {


filename = RES_RESOURCE_FILE_EN;


} else if (locale.equals(Locale.CHINA)


|| locale.equals(Locale.CHINESE)) {


filename = RES_RESOURCE_FILE;


} else {


filename = RES_RESOURCE_FILE_EN;


}


} else {


return null;


}


try {






String folder = RES_CONFIG_FOLER_CASE;


if (!new File("/data/local/tmp/" + folder).exists()) {


folder = ".";


}






DocumentBuilder builder = dbf.newDocumentBuilder();


Document doc = builder.parse("file:///data//local//tmp//" + folder


+ "//" + filename);


doc.normalize();


NodeList node = doc.getElementsByTagName(tagname);


String result = node.item(0).getTextContent();


return result;


} catch (ParserConfigurationException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


} catch (SAXException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


} catch (IOException e) {


// TODO Auto-generated catch block


e.printStackTrace();


return "";


}


}






// ningbiao


/**


* @Title: getCurretnLocale


* @Description: 切换手机默认语言


* @param


* @param


* @param


* @return


* @throws


*/


public static Locale getCurretnLocale() {


try {


Object objIActMag, objActMagNative;


Class clzIActMag = Class.forName("android.app.IActivityManager");


Class clzActMagNative = Class


.forName("android.app.ActivityManagerNative");


Method mtdActMagNative$getDefault = clzActMagNative


.getDeclaredMethod("getDefault");


// IActivityManager iActMag = ActivityManagerNative.getDefault();


objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);


// Configuration config = iActMag.getConfiguration();


Method mtdIActMag$getConfiguration = clzIActMag


.getDeclaredMethod("getConfiguration");


Configuration config = (Configuration) mtdIActMag$getConfiguration


.invoke(objIActMag);


return config.locale;


} catch (Exception e) {


e.printStackTrace();


}


return Locale.ENGLISH;


}






// ningbiao


/**


* @Title: setDefaultSimCard


* @Description: 设置默认卡(短信/通话/数据链接/视频通话)


* @param SIM_SELECT_TYPE


*            selectType


* @param CALL_SIM_TYPE


*            simType


* @param boolean alwaysPrompt


* @return


* @throws UiObjectNotFoundException


*/


public static void setDefaultSimCard(SIM_SELECT_TYPE selectType,


CALL_SIM_TYPE simType, boolean alwaysPrompt)


throws UiObjectNotFoundException {


goHome();


if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {


try {


openApp(UiUtil.readResResource("ui_text_setting"));


enterSetChild(UiUtil.readResResource("settings_text_sim_cards"));


String resStr = null;


if (selectType == SIM_SELECT_TYPE.CALL) {


resStr = "settings_text_calls_setting";


} else if (selectType == SIM_SELECT_TYPE.MMS) {


resStr = "settings_text_message_setting";


} else {


return;


}


System.out.print("resStr=" + resStr);


UiObject mDialog = UiUtil.findByText(UiUtil


.readResResource(resStr));


if (mDialog.exists()) {


mDialog.clickAndWaitForNewWindow();


}


UiUtil.Sleep(1000);


if (alwaysPrompt) {


resStr = UiUtil


.readResResource("settings_text_ask_every_time");


UiObject obj = UiUtil.findByText(resStr);


obj.clickAndWaitForNewWindow();


} else {


UiCollection collextion = new UiCollection(


new UiSelector()


.resourceId("android:id/select_dialog_listview"));


int instance = 1;


if (simType == CALL_SIM_TYPE.SIM1) {


instance = 1;


} else if (simType == CALL_SIM_TYPE.SIM2) {


instance = 2;


}


System.out.print("instance:" + instance + "\n");


UiObject obj = collextion


.getChild(new UiSelector()


.resourceId(


"com.android.settings:id/default_subscription_off")


.instance(instance));


System.out.print("obj:" + obj.exists() + "\n");


if (obj.exists()) {


obj.clickAndWaitForNewWindow();


}


}


goHome();


} catch (Exception e) {


e.printStackTrace();


}


} else {


try {


openApp(UiUtil.readResResource("ui_text_setting"));


enterSetChild(UiUtil.readResResource("settings_text_mulitsim"));


String resStr = null;


if (selectType == SIM_SELECT_TYPE.CALL) {


resStr = "settings_text_mulitsim_voice";


} else if (selectType == SIM_SELECT_TYPE.DATACONNECT) {


resStr = "settings_text_mulitsim_dataconnect";


} else if (selectType == SIM_SELECT_TYPE.VIDEOCALL) {


resStr = "settings_text_mulitsim_video";


} else if (selectType == SIM_SELECT_TYPE.MMS) {


resStr = "settings_text_mulitsim_mms";


} else {


return;


}


System.out.print("resStr=" + resStr);


UiObject dialBtn = UiUtil.findByText(UiUtil


.readResResource(resStr));


// Fix for JRX test case.


if (!dialBtn.exists()) {


if (selectType == SIM_SELECT_TYPE.CALL) {


resStr = "settings_text_mulitsim_voice_call";


} else if (selectType == SIM_SELECT_TYPE.DATACONNECT) {


resStr = "settings_text_mulitsim_dataconnect";


} else if (selectType == SIM_SELECT_TYPE.VIDEOCALL) {


resStr = "settings_text_mulitsim_video_call";


} else if (selectType == SIM_SELECT_TYPE.MMS) {


resStr = "settings_text_mulitsim_mms_call";


} else {


return;


}


dialBtn = UiUtil.findByText(UiUtil.readResResource(resStr));


}


dialBtn.clickAndWaitForNewWindow();


UiUtil.Sleep(1000);


if (alwaysPrompt) {


resStr = UiUtil


.readResResource("settings_text_mulitsim_always_prompt");


} else {


resStr = UiUtil.readResResource("settings_text_sim")


+ ((simType == CALL_SIM_TYPE.SIM1) ? "1" : "2");


}


UiObject obj = UiUtil.findByText(resStr);


if (!obj.exists()) {


UiObject select_dialog_listview = findByResourceId("android:id/select_dialog_listview");


if (select_dialog_listview.exists()) {


// sim1 is index 0,sim2 is index 1;


int instance = alwaysPrompt ? 2


: (simType == CALL_SIM_TYPE.SIM1 ? 0 : 1);


UiCollection collextion = new UiCollection(


new UiSelector()


.packageName("com.android.settings")


.className(


"android.widget.RelativeLayout")


.index(instance));


UiObject mRadioButton = collextion


.getChild(new UiSelector()


.className("android.widget.RadioButton"));


if (!mRadioButton.isChecked()) {


mRadioButton.clickAndWaitForNewWindow();


}


}


} else {


obj.clickAndWaitForNewWindow();


}


goHome();


} catch (Exception e) {


e.printStackTrace();


// TODO: handle exception


}


}


}






// ningbiao


/**


* @Title: enterSetChild


* @Description: 通过名字,进入列表中某一项


* @param String


*            setName


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public static void enterSetChild(String setName)


throws UiObjectNotFoundException {


UiScrollable setList = UiUtil


.findScrollableByResource("android:id/list");


System.out.print("enterSetChild setList.exists" + setList.exists()


+ "\n");


if (!setList.exists()) {


setList = UiUtil.findScrollableByClass("android.widget.ScrollView");


}


setList.setAsVerticalList();


UiObject searchItem = new UiObject(new UiSelector().text(setName));


while (!searchItem.exists()) {


boolean scroll = setList.scrollForward();


UiUtil.checkPoint("no found the searchItem", (scroll == true));


}


searchItem.clickAndWaitForNewWindow();


}






// ningbiao


/**


* @Title: getRandomString


* @Description: 产生一个随机的字符串


* @param int length


* @param


* @param


* @return String


* @throws


*/


public static String getRandomString(int length) {


String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";


Random random = new Random();


StringBuffer buf = new StringBuffer();


for (int i = 0; i < length; i++) {


int num = random.nextInt(62);


buf.append(str.charAt(num));


}


return buf.toString();


}






/**


* @Title: loginfo


* @Description: 输出LOG


* @param String


*            tag


* @param String


*            info


* @param


* @return


* @throws UiObjectNotFoundException


*/


public static void loginfo(String tag, String info) {


System.out.println(TAG + ":" + info + "\n");


Log.d(TAG + tag, info);


}






/**


* @Title: loginfo


* @Description: 输出LOG


* @param String


*            tag


* @param String


*            info


* @param UiObjectNotFoundException


*            e


* @return


* @throws UiObjectNotFoundException


*/


public static void loginfo(String tag, String info,


UiObjectNotFoundException e) {


int num = e.getStackTrace().length;


for (int i = 0; i < num; i++) {


loginfo(tag,


e.getStackTrace()[i].getClassName() + "."


+ e.getStackTrace()[i].getMethodName() + "("


+ e.getStackTrace()[i].getFileName() + ":"


+ e.getStackTrace()[i].getLineNumber() + ")");


}


}






// ningbiao


/**


* @Title: clickObjectByText


* @Description: 通过Text查找并点击对象


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void clickObjectByText(String text) throws UiObjectNotFoundException {


UiObject object = findByText(text);


checkPoint("clickObjectByText fail", object.exists());


object.clickAndWaitForNewWindow();


}






public void clickObjectByDes(String text) throws UiObjectNotFoundException {


UiObject object = findByDesc(text);


checkPoint("clickObjectByDes fail", object.exists());


object.clickAndWaitForNewWindow();


}






/**


* @Title: clickObjectByID


* @Description: 通过ID查找并点击对象


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void clickObjectByID(String resourceID)


throws UiObjectNotFoundException {


UiObject object = findById(resourceID);


checkPoint("clickObjectByID fail", object.exists());


object.clickAndWaitForNewWindow();


}






/**


* @Title: clickObjectByClassName


* @Description: 通过Text查找并点击对象


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void clickObjectByClassName(String className)


throws UiObjectNotFoundException {


UiObject object = findByClassName(className);


checkPoint("text object is not exists", object.exists());


object.clickAndWaitForNewWindow();


}






// click if object exists


/**


* @Title: clickObjectByTextIfExists


* @Description: 通过Text查找并点击对象(对象存在)


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void clickObjectByTextIfExists(String text)


throws UiObjectNotFoundException {


UiObject object = findByText(text);


if (object.exists()) {


object.clickAndWaitForNewWindow();


}


}






/**


* @Title: clickObjectByIDIfExists


* @Description: 通过ID查找并点击对象(对象存在)


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void clickObjectByIDIfExists(String resourceID)


throws UiObjectNotFoundException {


UiObject object = findById(resourceID);


if (object.exists()) {


object.clickAndWaitForNewWindow();


}


}






/**


* @Title: clickObjectByClassNameIfExists


* @Description: 通过类名查找并点击对象(对象存在)


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void clickObjectByClassNameIfExists(String className)


throws UiObjectNotFoundException {


UiObject object = findByClassName(className);


if (object.exists()) {


object.clickAndWaitForNewWindow();


}


}






// click if object exists end.






/**


* @Title: clickJustOnceButton


* @Description: 点击Just once按钮


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void clickJustOnceButton() throws UiObjectNotFoundException {


if (checkObjectExistsByText(readResResource("ui_text_just_once"))) {


loginfo(TAG, "Has just once button,click!");


clickObjectByText(readResResource("ui_text_just_once"));


}


}






/**


* @Title: clickAlwaysButton


* @Description: 点击always按钮


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void clickAlwaysButton() throws UiObjectNotFoundException {


clickObjectByText(readResResource("ui_text_always"));


}






/**


* @Title: checkObjectExistsByID


* @Description: 通过对象的资源Id,判断对象是否存在


* @param resourceId


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public static boolean checkObjectExistsByID(String resourceId)


throws UiObjectNotFoundException {


UiObject object = findById(resourceId);


return object.exists();


}






public static boolean checkObjectExistsByIDAndText(String resourceId,


String text) throws UiObjectNotFoundException {


UiObject object = findByResourceIdAndText(resourceId, text);


return object.exists();


}






/**


* @Title: checkObjectExistsByText


* @Description: 通过Text中的字符,判断对象是否存在


* @param text


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public static boolean checkObjectExistsByText(String text)


throws UiObjectNotFoundException {


UiObject object = findByText(text);


return object.exists();


}






/**


* @Title: checkObjectExistsByTextContains


* @Description: 通过Text中包含的字符,判断对象是否存在


* @param text


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public static boolean checkObjectExistsByTextContains(String text)


throws UiObjectNotFoundException {


UiObject object = findByTextContains(text);


return object.exists();


}






/**


* @Title: checkObjectExistsByTextDesc


* @Description: 通过Desc中包含的字符,判断对象是否存在


* @param text


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public static boolean checkObjectExistsByTextDesc(String text)


throws UiObjectNotFoundException {


UiObject object = findByDesc(text);


return object.exists();


}






/**


* @Title: checkObjectExistsByPackage


* @Description: 通过包名,判断对象是否存在


* @param text


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public static boolean checkObjectExistsByPackage(String packageName)


throws UiObjectNotFoundException {


UiObject object = findByPackageName(packageName);


return object.exists();


}






/**


* @Title: connectMobileData


* @Description: 进入设置打开数据链接


* @param


* @param


* @param


* @return


* @throws UiObjectNotFoundException


*/


public void connectMobileData() throws UiObjectNotFoundException {


goHome();


openApp(UiUtil.readResResource("ui_text_setting"));


if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {


enterSetChild(UiUtil.readResResource("settings_text_sim_cards"));


} else {


enterSetChild(UiUtil.readResResource("settings_text_mulitsim"));


}


UiObject universal_switch = findByIdIndex(


"com.android.settings:id/universal_switch", 1);


boolean checked = universal_switch.isChecked();


loginfo(TAG, "connectMobileData checked=" + checked);


if (!checked) {


universal_switch.clickAndWaitForNewWindow();


}






}






/**


* @Title: UiUtil


* @Description: 从垂直滚动listview中按名称查找控件


* @param scrollId


* @param name


* @return


* @throws UiObjectNotFoundException


* @throws


*/


public UiObject findByTextAsVerticalScroll(String scrollId, String name)


throws UiObjectNotFoundException {


// UiScrollable scrollView = new UiScrollable(new UiSelector().resourceId(scrollId).scrollable(true));


             UiScrollable scrollView = new UiScrollable(new UiSelector().resourceId(scrollId));


scrollView.setAsVerticalList();


UiObject object = findByText(name);


int i = 0;


while (!object.exists()) {


scrollView.scrollForward();


i++;


if (i == 50) {


break;


}


}


return object;


}






// ningbiao


/**


* @Title: addWatcher


* @Description: 添加监听器


* @param watcherName


* @param watcherObject


* @param conditionObject


* @return


* @throws


*/


public void addWatcher(final String watcherName,


final UiObject watcherObject, final UiObject conditionObject) {


try {


UiDevice.getInstance().registerWatcher(watcherName,


new UiWatcher() {


public boolean checkForCondition() {


// TODO Auto-generated method stub


if (watcherObject.exists()) {


try {


loginfo(TAG, "watcherName:" + watcherName);


if (conditionObject.exists()


&& conditionObject.isEnabled()) {


conditionObject


.clickAndWaitForNewWindow();


}


} catch (UiObjectNotFoundException e) {


// TODO Auto-generated catch block


e.printStackTrace();


loginfo(TAG, "addWatcher!", e);


return false;


}


sleep(2000);


return true;


} else {


return false;


}


}


});


} catch (Exception e) {


// TODO: handle exception


e.printStackTrace();


loginfo(TAG, "addWatcher!");


}


}






/**


* @Title: addWatcherCheckable


* @Description: 添加勾选框监听器


* @param watcherName


* @param watcherObject


* @param conditionObject


* @return


* @throws


*/


public void addWatcherCheckable(String watcherName,


final UiObject watcherObject, final UiObject conditionObject) {


try {


UiDevice.getInstance().registerWatcher(watcherName,


new UiWatcher() {


public boolean checkForCondition() {


// TODO Auto-generated method stub


if (watcherObject.exists()) {


try {


if (conditionObject.isCheckable()


&& !conditionObject.isChecked()) {


conditionObject


.clickAndWaitForNewWindow();


}


} catch (UiObjectNotFoundException e) {


// TODO Auto-generated catch block


e.printStackTrace();


loginfo(TAG, "addWatcher!", e);


return false;


}


return true;


} else {


return false;


}


}


});


} catch (Exception e) {


// TODO: handle exception


e.printStackTrace();


loginfo(TAG, "addWatcher!");


}


}






/**


* @Title: realeseWatcher


* @Description: 取消监听器


* @param watcherName


* @return


* @throws


*/


public void realeseWatcher(String watcherName) {


UiDevice.getInstance().removeWatcher(watcherName);


}





public static String getSDPath(){ 


       File sdDir = null; 


       boolean sdCardExist = Environment.getExternalStorageState()   


                           .equals(android.os.Environment.MEDIA_MOUNTED);   //判断sd卡是否存在 


       if (sdCardExist)   


       {                               


         sdDir = Environment.getExternalStorageDirectory();//获取根目录 


       }


       


       loginfo(TAG, "sd card dir = "+sdDir.toString());


       


       return sdDir.toString();       


}










    public void swipe(SWIPEDIRECTION direction) {


int xLocation;


int yLocation;


xLocation = UiDevice.getInstance().getDisplayWidth();


yLocation = UiDevice.getInstance().getDisplayHeight() / 2;


switch (direction) {


case LEFT:


UiDevice.getInstance().swipe(xLocation - 10, yLocation, 10,


yLocation, 10);


sleep(2000);


break;


case RIGHT:


UiDevice.getInstance().swipe(10, yLocation, xLocation - 10,


yLocation, 10);


sleep(2000);


break;


default:


break;


}


}


}

根据UIAutomation封装了很多自定义方法 现在只需要实例化之后 直接调用方法即可完成。比如单击某个按钮,现在只需要直接调用ClickElement,非常实用。 ClickElement 单击指定的自动化元素 DisselectAllDataGridRow 不选所有行 DisselectDataGridRow 不选特定的某一行 FocusWindow 获取窗口焦点 GetAllElement 获取指定父自动化元素下的所有激活的控件 GetAllElementDetails 获取指定自动化元素下的详细信息包括AutomationID,ControlType以及Name GetAllMenus 获取所有菜单项 GetAllSubMenus 获取某个菜单下的所有子菜单项 GetColumnsFromGridLine 获取指定行的所有列 GetColumnValuesFromGridLine 获取行的每一列数据 GetControlType(AutomationElement) 获取制动自动化元素的控件类型 GetControlType(TypeOfControl) 获取UIAutomation的控件类型 GetDocumentText 获取document控件的值 GetElementByID 获取父自动化元素下指定元素控件ID的引用 GetElementByName 获取父自动化元素下的指定子元素的引用 GetElementsByControlType 获取父自动化元素下的特定类型的所有自动化元素 GetGridLinesFromDataGrid 获取网格控件的全部行元素的引用 GetHeaderFromDataGrid 获取指定网格控件的标题栏引用 GetMenuBar 获取菜单栏控件 GetMenuByName 通过特定的名称去获取菜单UI自动化元素 GetName 获取指定自动化元素的名称 GetSubMenuByName 获取主菜单下的指定子菜单项的引用 GetValue 获取指定自动化元素的值 GetWindowByName(String) 获取desktop下的指定窗口名称的子UI自动化元素 GetWindowByName(String, AutomationElement) 获取特定父UI自动化元素下的制定窗口名称的子UI自动化元素 GetWindowList() 获取当前桌面根下所有的UI自动化元素下 GetWindowList(AutomationElement) 获取特定父UI自动化元素下的所有窗口的名称 RefindMainApplication 重新获取desktop下的指定窗口的自动化元素引用 SelectAllDataGridRow 选所有行 SelectDataGridRow(AutomationElement) 选特定的某一行 SelectDataGridRow(AutomationElement, Boolean) 将特定的DateGridRow加入选 SelectValueInComboBox 从下拉框指定值的项 SelectValueInListBox 从列表指定值的项 SetValue 给予指定自动化元素赋值 以上的方法还不是很完善 正在完善。如果有什么意见和建议,请发送邮件获取 chenxu7601257@qq.com 如果你看了这个帮助文件之后觉得有用的,请发邮件获取,我将把dll文件给你。谢谢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值