Проблемы с модульным тестированием Espresso - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь создать тест с Espresso на студии android. У меня все та же ошибка.

androidx.test.espresso.NoMatchingViewException: в иерархии не найдено сопоставление: (со строкой из идентификатора ресурса: <2131296484> [joinParticipates] значение: false и с текстом: is "שחקנים שהצטרפו: asaf , tair "и Child в позиции 7 в родительском (со строкой из идентификатора ресурса: <2131296370> и Child в позиции 0 в родительском экземпляре android .widget.LinearLayout) и отображается на экране для пользователя)

Интересно, может ли кто-нибудь из вас помочь мне с этим .. Это код, который я получил от теста эспрессо

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>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...