AndroidStudio通过UIAutomator进行测试 用例编写(二)

样本格式:

/**

* 样例

*/

@RunWith(AndroidJUnit4.class)

@SdkSuppress(minSdkVersion = 18)

public class BasicSampleTest {

    private final static String TAG = "BasicSampleTest";

    private UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());

    private static final String FLAG = "";//选取主activity的 flag //TODO

    private static final String TEST_PACKAGE_NAME = "";//app package Name //TODO

    private static final int LAUNCH_TIMEOUT = 2000;

    private int[] controlInfo = new int[10]; //{x, y, centerX, centerY, width, height};//控件坐标信息

    private static final int SCRE_WIDTH = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()).getInstance().getDisplayWidth();//获取屏幕宽度

    private static final int SCRE_HEIGHT = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()).getInstance().getDisplayHeight();//获取屏幕高度

    /*************************************定义ID begin**********************************************************/

    //private static final String SAMP = "samp";

    /*************************************定义ID end**********************************************************/

    /*************************************Test Before begin**********************************************************/

    /**

    * 从主屏幕启动应用

    */

    @Before

    public void startMainActivityFromHomeScreen() {

        // wakeup screen

        try {

            if (!mDevice.isScreenOn()) {

                mDevice.wakeUp();

            }

        } catch (RemoteException e) {

            Log.e(TAG, "Device wakeUp exception!");

            e.printStackTrace();

        }

        // Wait for launcher

        final String launcherPackage = getLauncherPackageName();

        assertThat(launcherPackage, notNullValue());

        mDevice.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), LAUNCH_TIMEOUT);

        //如果测试应用的主 activity 未显示 则开启

        if (mDevice.wait(Until.hasObject(By.pkg(TEST_PACKAGE_NAME).depth(0)), LAUNCH_TIMEOUT)) {

            //如果应用已经启动,判断是否是在 main activity 不在重新启动

            Log.e(TAG, "应用已经启动");

            UiObject mainActivityFlag = mDevice.findObject(new UiSelector().resourceId(FLAG));//获取主activity的FLAG

            if (!mainActivityFlag.exists()) {//根据 main activity 的元素是否存在判断是否重新启动

                Log.e(TAG, "重新启动app");

                startApp(TEST_PACKAGE_NAME, LAUNCH_TIMEOUT);

            }

        } else {

            Log.e(TAG, "应用未启动,启动应用");

            startApp(TEST_PACKAGE_NAME, LAUNCH_TIMEOUT);

        }

    }

    /**

    * Uses package manager to find the package name of the device launcher. Usually this package

    * is "com.android.launcher" but can be different at times. This is a generic solution which

    * works on all platforms.`

    */

    public String getLauncherPackageName() {

        // Create launcher Intent

        final Intent intent = new Intent(Intent.ACTION_MAIN);

        intent.addCategory(Intent.CATEGORY_HOME);

        // Use PackageManager to get the launcher package name

        PackageManager pm = InstrumentationRegistry.getContext().getPackageManager();

        ResolveInfo resolveInfo = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);

        return resolveInfo.activityInfo.packageName;

    }

    /**

    * 进入抽屉点击启动APP

    *

    * @param className

    * @param dex

    * @param appName

    */

    public void clickApp(String className, int dex, String appName) {

        try {

            UiObject appItem = mDevice.findObject(new UiSelector().className(className).index(dex).childSelector(new UiSelector().text(appName)));

            appItem.click();

        } catch (UiObjectNotFoundException e) {

            e.printStackTrace();

        }

    }

    /**

    * 打开app

    *

    * @param packageName

    * @param timeOut

    */

    public void startApp(String packageName, int timeOut) {

        Context context = InstrumentationRegistry.getContext();

        final Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);

        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);    // Clear out any previous instances

        context.startActivity(intent);

        // Wait for the app to appear

        mDevice.wait(Until.hasObject(By.pkg(packageName).depth(0)), timeOut);

    }

    /**

    * 获取控件坐标信息

    * @param resourceID

    * @return

    */

    public int[] getControlInfo(String resourceID) {//TODO

        UiObject2 control = mDevice.findObject(By.res(TEST_PACKAGE_NAME, resourceID));

        Log.d(TAG, "control====" + control);

        Rect controlRect = control.getVisibleBounds();

        Log.d(TAG, "controlRect====" +controlRect);

        controlInfo[0] = controlRect.right;

        controlInfo[1] = controlRect.bottom;

        controlInfo[2] = controlRect.centerX();

        controlInfo[3] = controlRect.centerY();

        controlInfo[4] = controlRect.width();

        controlInfo[5] = controlRect.height();

        return controlInfo;

    }

    /**

    * 点击控件

    * @param stringId

    * @param isLongClick

    */

    private void clickControl(String stringId, boolean isLongClick) {

        Log.d(TAG, "clickControl-stringId=====" + stringId);

        if (stringId != null) {

            if (isLongClick) {

                mDevice.findObject(By.res(TEST_PACKAGE_NAME, stringId)).longClick();

            } else {

                mDevice.findObject(By.res(TEST_PACKAGE_NAME, stringId)).click();

            }

        }

    }

    /**

    * 获取控件 TEXT 内容

    * @param stringId

    * @return

    */

    private String getControlText(String stringId) {

        Log.d(TAG, "getControlText-stringId=====" + stringId);

        String text = mDevice.findObject(By.res(TEST_PACKAGE_NAME, stringId)).getText().trim();

        if (text != null) {

            return text;

        } else {

            return "TEST_ERROR";

        }

    }

    /*****************************************Test Before end**************************************************/

    /*****************************************定义其他方法 begin**************************************************/

    /**

    * 获取屏幕宽度

    * @param activity

    * @return

    */

    public final static int getWindowsWidth(Activity activity) {

        DisplayMetrics displayMetrics = new DisplayMetrics();

        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

        return displayMetrics.widthPixels;

    }

    /**

    * 获取屏幕高度

    * @param activity

    * @return

    */

    public final static int getWindowsHight(Activity activity) {

        DisplayMetrics displayMetrics = new DisplayMetrics();

        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

        return displayMetrics.heightPixels;

    }

    /**

    * 获取控件高度

    * @param view

    * @return

    */

    public final static int getViewhight(View view) {

        int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

        int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

        view.measure(w, h);

        int height = view.getMeasuredHeight();

        return height;

    }

    /**

    * 获取控件宽度

    * @param view

    * @return

    */

    public final static int getViewWidth(View view) {

        int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

        int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

        view.measure(w, h);

        int width = view.getMeasuredWidth();

        return width;

    }

    /*****************************************定义其他方法 begin**************************************************/

    /***************************************测试 CASE  begin**************************************************/

    /**

    *

    */

    @Test

    public void test_basic_sample_001() throws InterruptedException {

        sleep(500);

        assertEquals("message", "expected_result", "actual_result");

    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355