在Android Espresso UI测试中退出Facebook

4
我有一些使用Facebook SDK的自动化测试: - 在我的应用中注册 - 在我的应用中登录
我运行了注册测试,它基本上调用了Chrome,并在Facebook上登录以继续在我的应用程序中使用信息进行注册过程。
但是当我想在模拟器上运行第二个测试——登录时,我已经在Chrome上登录了Facebook,我希望在这个测试中使用另一个帐户...
在我的测试中有没有一种方法可以注销?
2个回答

0

自从这个问题出现后,我找到了一种在UI测试中清理Chrome的方法,这对于使用法语或英语的手机应该有效:

private void cleanChrome() {
    final UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
    try {
        //Clear chrome data
        String urlString = "http://nurburgring.ben-j.fr";
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setPackage("com.android.chrome");
        try {
            KlaxitApp.getContext().startActivity(intent);
        } catch (ActivityNotFoundException ex) {
            // Chrome browser presumably not installed so allow user to choose instead
            intent.setPackage(null);
            KlaxitApp.getContext().startActivity(intent);
        }
        mDevice.wait(Until.findObject(By.clazz(WebView.class)), 10 * 1000);
        //Check if never used
        acceptChromeCgus();

        UiObject urlField = mDevice.findObject(new UiSelector().className(EditText.class));
        urlField.click();
        urlField.setText("chrome://history");
        mDevice.pressEnter();

        Thread.sleep(5000);

        UiObject clearBTN = mDevice.findObject(new UiSelector().className(Button.class).descriptionContains("CLEAR"));
        if (clearBTN.exists()) {
            clearBTN.click();
        } else {
            clearBTN = mDevice.findObject(new UiSelector().textContains("CLEAR"));
            if (clearBTN.exists()) {
                clearBTN.click();
            } else {
                //french phone
                clearBTN = mDevice.findObject(new UiSelector().className(Button.class).textContains("EFFACER LES DONNÉES DE NAVIGATION"));
                if (clearBTN.exists()) {
                    clearBTN.click();
                }
            }
        }

        //Period required on dev phone but not on CI
        UiObject periodBTN = mDevice.findObject(new UiSelector().textContains("Dernière heure"));
        if (periodBTN.exists()) {
            periodBTN.click();
            UiObject allPeriodTV = mDevice.findObject(new UiSelector().textContains("Toutes"));
            if (allPeriodTV.exists()) {
                allPeriodTV.click();
            }
        }

        Thread.sleep(1000);
        clearBTN = mDevice.findObject(new UiSelector().className(Button.class).descriptionContains("CLEAR"));
        if (clearBTN.exists()) {
            clearBTN.click();
        } else {
            //french phone
            clearBTN = mDevice.findObject(new UiSelector().className(Button.class).textContains("EFFACER LES DONNÉES"));
            if (clearBTN.exists()) {
                clearBTN.click();
            }
        }

        UiObject clearDataBTN = mDevice.findObject(new UiSelector().className(Button.class).textContains("CLEAR DATA"));
        if (clearDataBTN.exists()) {
            clearDataBTN.click();
        } else {
            //french phone
            clearDataBTN = mDevice.findObject(new UiSelector().className(Button.class).textContains("EFFACER"));
            if (clearDataBTN.exists()) {
                clearDataBTN.click();
            }
        }

        //Popup
        UiObject okBTN = mDevice.findObject(new UiSelector().className(Button.class).textContains("OK"));
        if (okBTN.exists()) {
            okBTN.click();
        } else {
            okBTN = mDevice.findObject(new UiSelector().className(Button.class).textContains("CLEAR"));
            if (okBTN.exists()) {
                okBTN.click();
            }
        }

        final String connectWith = getResourceString(R.string.Connect_with);
        UiObject connectWithTV = mDevice.findObject(new UiSelector().className(TextView.class).text(connectWith));
        while (!connectWithTV.exists()) {
            Thread.sleep(2000);
            Timber.i("PRESS BACK");
            mDevice.pressBack();
            Thread.sleep(2000);
            connectWithTV = mDevice.findObject(new UiSelector().className(TextView.class).text(connectWith));
        }
    } catch (Exception e) {
        e.printStackTrace();
        mDevice.pressBack();
    }
}

0
尝试通过以下方式清除Chrome数据:
uiDevice.executeShellCommand("pm clear com.android.chrome")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接