android - Espresso 找不到 View : NoMatchingViewException

标签 android android-testing ui-testing android-espresso

在我的应用程序中,我在一个 Activity 中附加了两个 fragment 。每个 fragment 包含不同的 View 。

第一个有两个编辑文本字段和两个按钮,用户可以在其中登录或注册。所以现在我想应用一些 Espresso 测试。

@RunWith(AndroidJUnit4.class)
public class LoginTest {
@Rule
public final ActivityRule<MainActivity> main = new ActivityRule<>   
(MainActivity.class);

@Test
public void shouldBeAbleToFindViewsOfLoginScreen(){
    onView(withText(R.id.user_name)).perform(click());
   }

 }

但是测试提示找不到 ID 为 R.id.user_name 的 View 。

android.support.test.espresso.NoMatchingViewException: No views in hierarchy    
found matching: with string from resource id: <2131493050>[user_name] value:    
false

我也使用从 uiautomatorviewer 中检查的正确 ID。

这个 fragment 的xml代码是

<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/fragmentLogin"
tools:context="team.football.ael.MainActivity"
android:background="@drawable/background">
<include

    android:id="@+id/toolbar"
    layout="@layout/tool_lay"

    />

<LinearLayout
    android:padding="20dp"
    android:background="@drawable/roundedlayout"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_width="wrap_content"
    android:orientation="vertical"
    android:layout_height="wrap_content">
    <ImageView
        android:src="@mipmap/ael_logo"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="center_horizontal" />
    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">
    <EditText
        android:id="@+id/user_name"
        android:hint="@string/login_username"
        android:textColor="#fff"
        android:textColorHint="#fff"
        android:layout_width="250dp"
        android:layout_height="wrap_content" />
    </android.support.design.widget.TextInputLayout>
    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">
    <EditText
        android:id="@+id/user_pass"
        android:textColorHint="#fff"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:layout_marginTop="20dp"
        android:hint="κωδικός"
        android:textColor="#fff"

        />
    </android.support.design.widget.TextInputLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/loginButton"
            android:layout_gravity="center_horizontal"
            android:text="Εισοδος"
            android:layout_marginTop="20dp"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:textColor="#fff"
            android:background="@drawable/roundbutton"
            android:layout_height="wrap_content"
            android:onClick="userLogin"/>

        <Button
            android:layout_marginTop="20dp"
            android:layout_gravity="center_horizontal"
            android:text="Εγγραφη"
            android:textColor="#fff"

            android:layout_width="0dp"
            android:layout_marginLeft="10dp"

            android:background="@drawable/roundbutton"

            android:onClick="userReg"
            android:layout_weight="1"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <TextView
        android:textStyle="bold|italic"
        android:textSize="25sp"
        android:layout_gravity="center_horizontal"
        android:text="Ξέχασες τον κωδικό σου?"
        android:id="@+id/forgotPass"
        android:textColor="#fff"

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

有什么想法吗?

谢谢。

最佳答案

回答

改变:

      onView(withText(R.id.user_name)).perform(click());

      onView(withId(R.id.user_name)).perform(click());

解释

  • withId()android:id
  • 的匹配器
  • withText()android:text
  • 的匹配器

希望对你有帮助

关于android - Espresso 找不到 View : NoMatchingViewException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39178718/

相关文章:

java - 在 Android 中的 JUnit 测试用例中创建文件

android - 如何在仪器测试中模拟 Activity 依赖关系

javascript - 为什么触发事件在我的 phantomjs 脚本中不起作用?

android - 在 Android 的 ViewPager2 中检测越界滑动

android - monkeyrunner - 尝试使用 view.getLocation() 时出现 ChimpException

android-studio - 使用AndroidTestOrchestrator进行的调试在等待调试器时卡住

swift - 如何在 iOS UI 测试中查询 "Main Window"?

ios - XCUITest - 如何模拟设备的锁定

android - 如何在撰写中设置高度 WRAP_CONTENT?

Android Phonegap 滚动不工作