使用Espresso无法在底部页面中找到视图

时间:2017-10-11 16:35:15

标签: android testing kotlin android-espresso

我有一个包含CoordinatorLayout有两个孩子的Fragmant:MapView(Google Maps API)& RelativeLayout,最后一个布局包含一些我想使用Espresso测试的按钮。

所以这是我的测试:

@Test
fun randomButtonTest() {
    try {
        Thread.sleep(2000)
    } catch (e: InterruptedException) {
        e.printStackTrace()
    }

    // Find the button and perform a click
    val appCompatImageButton = onView(
            allOf(withId(R.id.random_poi), withContentDescription("Random Point of Interest"),
                    withParent(withId(R.id.design_bottom_sheet)),
                    isDisplayed()))
    appCompatImageButton.perform(click())

}

这是我的布局(我删除了所有与布局相关的可见性参数):

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.android.gms.maps.MapView
        android:id="@+id/mapView"/>

    <RelativeLayout
        android:id="@+id/design_bottom_sheet"            
        app:behavior_hideable="true"
        app:layout_behavior="@string/bottom_sheet_behavior">

        <ImageButton
            android:id="@+id/up_arrow" />  

        <ImageButton
            android:id="@+id/random_poi"
            android:contentDescription="@string/random_poi"/>

    </RelativeLayout>


</android.support.design.widget.CoordinatorLayout>

启动我的检测测试时出现以下错误:

  

android.support.test.espresso.NoMatchingViewException:找不到层次结构中的视图匹配:(使用id:kade.com.accio:id / random_poi并且内容描述:是“Random Point of Interest”并且具有父匹配: id:kade.com.accio:id / design_bottom_sheet,并在屏幕上显示给用户)

这是因为我的按钮位于底部吗?为什么我找不到这个观点?

1 个答案:

答案 0 :(得分:1)

首先你必须加载片段(否则没有要测试的片段)所以有两种方法

1。)实例化你的片段对象并使用像

这样的FragmentManager加载
console.log(JSON.stringify(k.data[0]['Account.FirstName']));

注意:如果您的观看次数不在屏幕上,那么您可以使用 @Before // you can do it later void setup(){ fragment = ... getActivity().getFragmentManager().beginTransaction().add(id,farment).commit() // or activityTestRule.getActivity() // .getSupportFragmentManager().beginTransaction() } 代替withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)