Я пытаюсь создать тест с 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()));
}
то, что я в основном пытаюсь получить, - это способ сказать мне, существует ли выделенный текст на картинке или нет.
это макет:
<?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>