首页 > 解决方案 > 测试 Firebase 登录 - 带有 Espresso 的 Android 应用

问题描述

我正在尝试测试我的应用程序(由我开发),其登录是通过 firebase 管理的。我正在用 Espresso 录音机给他们发短信。

我要测试的是正常的登录,登录后输入邮箱和密码以及一些简单的操作。

碰巧,一旦您输入密码和电子邮件并单击“登录”按钮,应用程序内部就会出现一种“跳转”,因此登录部分不受管理,测试停止并出现以下错误:

androidx.test.espresso.NoMatchingViewException:层次结构中没有找到匹配的视图...

正是因为模拟器和代码留在了登录页面,而记录器却进入了应用程序。

我该如何管理?我如何设置,甚至在我的测试中手动设置进入应用程序的事实?

这里是测试代码:

public class TestQuizMongo {

    @Rule
    public ActivityTestRule < Splash > mActivityTestRule = new ActivityTestRule < > (Splash.class);

    @Test
    public void testQuizMongo() {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            ViewInteraction appCompatButton = onView(
                allOf(withId(R.id.login_btn), withText("Login"),
                    childAtPosition(
                        childAtPosition(
                            withId(android.R.id.content),
                            0),
                        2),
                    isDisplayed()));
            appCompatButton.perform(click());

            ViewInteraction appCompatEditText = onView(
                allOf(withId(R.id.login_email),
                    childAtPosition(
                        childAtPosition(
                            withId(android.R.id.content),
                            0),
                        5),
                    isDisplayed()));
            appCompatEditText.perform(click());

            ViewInteraction appCompatEditText2 = onView(
                allOf(withId(R.id.login_email),
                    childAtPosition(
                        childAtPosition(
                            withId(android.R.id.content),
                            0),
                        5),
                    isDisplayed()));
            appCompatEditText2.perform(replaceText("xxxxxxxxxxxx@gmail.com"), closeSoftKeyboard());

            ViewInteraction appCompatEditText3 = onView(
                allOf(withId(R.id.login_pwd),
                    childAtPosition(
                        childAtPosition(
                            withId(android.R.id.content),
                            0),
                        6),
                    isDisplayed()));
            appCompatEditText3.perform(replaceText("xxxxxx"), closeSoftKeyboard());

            pressBack();

            ViewInteraction appCompatButton2 = onView(
                allOf(withId(R.id.login_btn), withText(endsWith("Accedi")),
                    childAtPosition(
                        childAtPosition(
                            withId(android.R.id.content),
                            0),
                        7),
                    isDisplayed()));
            appCompatButton2.perform(click());


            try {
                Thread.sleep(7000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            ViewInteraction appCompatImageView = onView(
                allOf(withId(R.id.macro_db), withContentDescription("xxx"),
                    childAtPosition(
                        childAtPosition(
                            withClassName(is("android.widget.LinearLayout")),
                            1),
                        5),
                    isDisplayed()));
            appCompatImageView.perform(click());

            // Here is the jump: first the code is about the login part
            //now the code is about the "internal" part of the app

            ViewInteraction appCompatImageView2 = onView(
                allOf(withId(R.id.mongo_button),
                    childAtPosition(
                        childAtPosition(
                            withClassName(is("android.widget.LinearLayout")),
                            3),
                        1),
                    isDisplayed()));
            appCompatImageView2.perform(click());

标签: androidfirebasetestingandroid-testingandroid-espresso-recorder

解决方案


推荐阅读