我正在尝试在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()));
}
我基本上想得到的是一种告诉我图片上突出显示的文本是否存在的方法。
这是布局:
<?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>