浓缩咖啡单元测试遇到问题

时间:2020-05-26 13:56:52

标签: java android unit-testing android-espresso android-espresso-recorder

我正在尝试在Android Studio上使用Espresso创建测试。 我不断收到相同的错误。

androidx.test.espresso.NoMatchingViewException:找不到层次结构中符合以下条件的视图:(带有来自资源ID的字符串:<2131296484> [joinParticipates]值:false和带有文本:is“שחקניםשהצטרפו:asaf,tair”

>

>

我想知道你们中的任何一个可以帮助我吗.. 这是我的浓缩咖啡测试代码

package com.example.bsport;


import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;

import androidx.test.espresso.ViewInteraction;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;

import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.hamcrest.core.IsInstanceOf;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
import static androidx.test.espresso.action.ViewActions.pressImeActionButton;
import static androidx.test.espresso.action.ViewActions.replaceText;
import static androidx.test.espresso.action.ViewActions.scrollTo;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withClassName;
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.is;

@LargeTest
@RunWith(AndroidJUnit4.class)
public class MyActivitiesTest {

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

    @Test
    public void myActivitiesTest() {
        // Added a sleep statement to match the app's execution delay.
        // The recommended way to handle such scenarios is to use Espresso idling resources:
        // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
        try {
            Thread.sleep(7000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        ViewInteraction appCompatEditText = onView(
                allOf(withId(R.id.login_userName),
                        childAtPosition(
                                childAtPosition(
                                        withClassName(is("android.widget.ScrollView")),
                                        0),
                                1)));
        appCompatEditText.perform(scrollTo(), replaceText("asafrdt"), closeSoftKeyboard());

        ViewInteraction appCompatEditText2 = onView(
                allOf(withId(R.id.login_userName), withText("asafrdt"),
                        childAtPosition(
                                childAtPosition(
                                        withClassName(is("android.widget.ScrollView")),
                                        0),
                                1)));
        appCompatEditText2.perform(pressImeActionButton());

        ViewInteraction appCompatEditText3 = onView(
                allOf(withId(R.id.login_password),
                        childAtPosition(
                                childAtPosition(
                                        withClassName(is("android.widget.ScrollView")),
                                        0),
                                2)));
        appCompatEditText3.perform(scrollTo(), replaceText("1234567"), closeSoftKeyboard());

        ViewInteraction appCompatEditText4 = onView(
                allOf(withId(R.id.login_password), withText("1234567"),
                        childAtPosition(
                                childAtPosition(
                                        withClassName(is("android.widget.ScrollView")),
                                        0),
                                2)));
        appCompatEditText4.perform(pressImeActionButton());

        ViewInteraction appCompatTextView = onView(
                allOf(withId(R.id.Im_Admin), withText("מנהל - לחץ כאן\u200E"),
                        childAtPosition(
                                childAtPosition(
                                        withClassName(is("android.widget.ScrollView")),
                                        0),
                                5)));
        appCompatTextView.perform(scrollTo(), click());

        ViewInteraction appCompatButton = onView(
                allOf(withId(R.id.login_button), withText("התחבר כמנהל"),
                        childAtPosition(
                                childAtPosition(
                                        withClassName(is("android.widget.ScrollView")),
                                        0),
                                7)));
        appCompatButton.perform(scrollTo(), click());
        // Added a sleep statement to match the app's execution delay.
        // The recommended way to handle such scenarios is to use Espresso idling resources:
        // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
        try {
            Thread.sleep(7000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        ViewInteraction tabView = onView(
                allOf(withContentDescription("הפעילות שלי"),
                        childAtPosition(
                                childAtPosition(
                                        withId(R.id.main_tabs),
                                        0),
                                4),
                        isDisplayed()));
        tabView.perform(click());

        ViewInteraction textView = onView(
                allOf(withId(R.id.joinParticipates), withText("שחקנים שהצטרפו: asaf, tair"),
                        childAtPosition(
                                allOf(withId(R.id.card_view1),
                                        childAtPosition(
                                                IsInstanceOf.<View>instanceOf(android.widget.LinearLayout.class),
                                                0)),
                                7),
                        isDisplayed()));
        textView.check(matches(isDisplayed()));
    }

    private static Matcher<View> childAtPosition(
            final Matcher<View> parentMatcher, final int position) {

        return new TypeSafeMatcher<View>() {
            @Override
            public void describeTo(Description description) {
                description.appendText("Child at position " + position + " in parent ");
                parentMatcher.describeTo(description);
            }

            @Override
            public boolean matchesSafely(View view) {
                ViewParent parent = view.getParent();
                return parent instanceof ViewGroup && parentMatcher.matches(parent)
                        && view.equals(((ViewGroup) parent).getChildAt(position));
            }
        };
    }
}

一切正常。.检查文本是否存在不成功:

       ViewInteraction textView = onView(
               allOf(withId(R.id.joinParticipates), withText("שחקנים שהצטרפו: asaf, tair"),
                       childAtPosition(
                               allOf(withId(R.id.card_view1),
                                       childAtPosition(
                                               IsInstanceOf.<View>instanceOf(android.widget.LinearLayout.class),
                                               0)),
                               7),
                       isDisplayed()));
       textView.check(matches(isDisplayed()));
}

我基本上想得到的是一种告诉我图片上突出显示的文本是否存在的方法。

enter image description here

这是布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   xmlns:card_view="http://schemas.android.com/apk/res-auto"
   android:layout_height="wrap_content"
   android:background="@color/colorAccent"
   android:layout_width="match_parent"
   android:orientation="vertical"
   android:padding="10dp"
   >

   <androidx.cardview.widget.CardView
       android:id="@+id/card_view1"
       android:layout_gravity="center"
       android:layout_width="320dp"
       android:layout_height="180dp"
       card_view:cardCornerRadius="20dp"
       card_view:cardBackgroundColor="@color/design_default_color_secondary_variant"

       >



       <TextView
           android:id="@+id/name_activity"
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:text="@string/name_activity"
           android:textColor="#FFFFFF"
           android:layout_marginRight="15dp"

           android:singleLine="true"
           android:textSize="20sp" />

       <TextView
           android:id="@+id/activity_type1"
           android:singleLine="true"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@string/activity_type1"
           android:textColor="#FFFFFF"
           android:layout_marginTop="30dp"
           android:layout_marginRight="15dp"

           android:textSize="15sp" />

       <TextView
           android:id="@+id/game_date1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:singleLine="true"
           android:layout_marginTop="50dp"
           android:layout_marginRight="15dp"

           android:text="@string/game_date1"
           android:textColor="#FFFFFF"
           android:textSize="15sp" />

       <TextView
           android:id="@+id/location"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:singleLine="true"
           android:layout_marginTop="70dp"
           android:layout_marginRight="15dp"

           android:text="@string/location_activity"
           android:textColor="#FFFFFF"
           android:textSize="15sp" />

p        <TextView
           android:id="@+id/number_of_players1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:singleLine="true"
           android:layout_marginTop="90dp"
           android:layout_marginRight="15dp"

           android:text="כמות שחקנים"
           android:textColor="#FFFFFF"
           android:textSize="15sp" />
       <TextView
           android:id="@+id/date_created"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:singleLine="true"
           android:layout_marginRight="15dp"
           android:layout_marginTop="110dp"

           android:text="תאריך יצירה"
           android:textColor="#FFFFFF"
           android:textSize="15sp" />

       <TextView
           android:id="@+id/joinParticipates"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:singleLine="true"
           android:layout_marginRight="15dp"
           android:layout_marginTop="130dp"
           android:text="שחקנים שנוספו"
           android:textColor="#FFFFFF"
           android:textSize="15sp" />

       <ImageButton
           android:id="@+id/remove_activity_image"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_marginStart="280dp"
           android:layout_marginTop="60dp"
           android:background="@color/design_default_color_secondary_variant"
           android:singleLine="true"

           android:src="@drawable/ic_remove_circle_black_24dp" />

   </androidx.cardview.widget.CardView>


</LinearLayout>

0 个答案:

没有答案