浓缩咖啡 - 点击textview(按钮)

时间:2016-07-15 07:15:16

标签: android automated-tests android-testing android-espresso

我想点击textview(这个textview是一个线性布局),但它给出了下面提到的错误。尝试了Espresso.onData,但它引发了一些其他错误。那么如何在这种情况下使用Espresso.onData?

  

android.support.test.espresso.NoMatchingViewException:找不到层次结构中的视图匹配:(使用id:logout:id / Profile_login_logout并且具有父匹配:具有id:logout:id / main_layout并且在屏幕上显示为用户)

     

如果目标视图不是视图层次结构的一部分,您可能需要使用Espresso.onData从以下某个

加载它。      

AdapterViews:android.support.v7.widget.AppCompatSpinner {3ca0fd9d GFED..C。 ......一世。 0,0-0,0#7f10043a app:id / language_profile_edit}

ViewInteraction appCompatTextView5 = onView(
allOf(withId(R.id.Profile_login_logout),
withParent(withId(R.id.main_layout)),
isDisplayed()));
appCompatTextView5.perform(scrollTo(), click());

这是xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/dull_gray">

<ProgressBar
    android:id="@+id/progress_profile"
    style="?android:progressDrawable"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:visibility="gone" />

<TextView
    android:id="@+id/text_loading_profile"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/progress_profile"
    android:layout_centerHorizontal="true"
    android:text="@string/loading"
    android:visibility="gone" />

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:id="@+id/main_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/profile_bg">

            <RelativeLayout
                android:id="@+id/person_image_profile_containner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/person_image_profile"
                    android:layout_alignParentLeft="true"
                    android:layout_centerVertical="true"
                    android:padding="@dimen/margin20" />
            </RelativeLayout>

            <ProgressBar
                android:id="@+id/progress_image_profile"
                style="?android:progressDrawable"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:visibility="gone" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_margin="@dimen/topMarginU2"
                android:layout_toRightOf="@+id/person_image_profile_containner">

                <TextView
                    android:id="@+id/person_name_profile"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentTop="true"/>

                <EditText
                    android:id="@+id/person_name_profile_edit"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentTop="true"
                    android:hint="@string/enter_name"
                    android:visibility="gone" />

                <RelativeLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">

                    <TextView
                        android:id="@+id/mobile_profile_initial"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="@dimen/topMargin"
                        android:textSize="@dimen/txtSizeS"
                        tools:ignore="HardcodedText" />

                    <EditText
                        android:id="@+id/mobile_profile_edit_initial"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:editable="false"
                        android:layout_alignParentBottom="true"
                        android:visibility="gone"
                        tools:ignore="HardcodedText" />

                </RelativeLayout>


                <EditText
                    android:id="@+id/email_profile_edit"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:visibility="gone" />
            </LinearLayout>
        </RelativeLayout>

        <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="true">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

      <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_height="wrap_content"
                        android:paddingLeft="@dimen/topMarginU2"
                        android:text="@string/language"/>

                    <Spinner
                        android:id="@+id/language_profile_edit"
                        android:layout_height="wrap_content"/>
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/selected_exams"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/selected_exams"/>
                </LinearLayout>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <android.support.v7.widget.RecyclerView
                        android:id="@+id/horiz_scroll_exams"
                        android:layout_width="wrap_content"
                        android:layout_centerVertical="true"
                        android:scrollbars="horizontal" />
                </RelativeLayout>

                <LinearLayout
                    android:id="@+id/personal_information"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:padding="@dimen/topMarginU2"
                        android:text="@string/personal_information"/>
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:text="@string/date_of_birth"
                        android:textSize="@dimen/textSize16" />

                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:text="@string/qualification"
                        android:textSize="@dimen/textSize16" />

                    <Spinner
                        android:id="@+id/qualification_profile_edit"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="@dimen/topMargin"
                        android:padding="@dimen/topMarginU2"
                        android:textSize="@dimen/textSize16"
                        android:visibility="gone" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/Personal_address"
                        android:layout_height="wrap_content"
                        android:text="@string/address"
                        android:textSize="@dimen/textSize16" />

                    <LinearLayout
                        android:layout_height="wrap_content"
                        android:orientation="vertical">

                        <TextView
                            android:id="@+id/address_basic"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:paddingLeft="@dimen/topMarginU2"
                            tools:ignore="HardcodedText" />

                        <EditText
                            android:id="@+id/edit_address_basic"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="@dimen/topMarginU2"
                            android:layout_marginTop="@dimen/topMarginU1"
                            android:hint="@string/enter_address"
                            android:visibility="gone" />


                        <Spinner
                            android:id="@+id/edit_address_state"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="@dimen/topMargin"
                            android:textSize="@dimen/txtSizeS"
                            android:visibility="gone" />
                    </LinearLayout>

                </LinearLayout>


                <View
                    android:layout_width="match_parent"
                    android:background="@color/dull_gray" />

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/title5"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_centerVertical="true"
                        android:textSize="@dimen/txtSize" />

                    <ImageView
                        android:id="@+id/dot1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerInParent="true"
                        android:src="@drawable/dot" />

                </RelativeLayout>



            </LinearLayout>
        </android.support.v7.widget.CardView>


        <TextView
            android:id="@+id/Profile_login_logout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@+id/signup_splash_tv"
            android:layout_centerHorizontal="true" />
    </LinearLayout>
</ScrollView>

1 个答案:

答案 0 :(得分:0)

鉴于布局有多么庞大,我怀疑allOf()匹配器在isDisplayed()失败了。当视图当前未显示在屏幕上时失败。

我真的不明白为什么你需要所有三个匹配器来唯一地识别视图。 Profile_login_logout似乎是一个唯一的ID,除withId()匹配器之外不需要任何其他ID。

如果要断言显示此视图,则需要先滚动到该视图。但是scrollTo()将检查在perform()调用的一部分滚动后是否显示视图。此外,click()也有isDisplayingAtLeast(90)约束。

如果您正在处理ViewPager(我希望不是这种情况)或类似的东西,您可以通过其父级查找视图,如allOf(withId(R.id.Profile_login_logout), hasParent(allOf(withId(R.id.main_layout), isDisplayed()))

此测试不需要

onData(),因为您没有除旋转器之外的任何适配器视图,这不属于当前正在测试的部分。