如何通过Espresso在测试中点击必要的坐标x,y?

时间:2015-02-27 13:00:15

标签: android testing canvas android-espresso coordinate

我需要在x,y中点击Espresso测试。

我有看法:

<view xmlns:android="http://schemas.android.com/apk/res/android"  class="uk.co.senab.actionbarpulltorefresh.extras.actionbarcompat.PullToRefreshLayout"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="top"
      android:id="@+id/pull_to_refresh_layout">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/date_param"
            android:textSize="@dimen/default_text_size"
            android:textColor="@color/palette_light_gray"
            android:layout_marginTop="25dp"
            android:layout_marginLeft="28dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <example.ui.view.UnderlinedTextIndicator
            android:id="@+id/tab_indicator"
            android:paddingLeft="@dimen/field_padding"
            android:paddingRight="@dimen/field_padding"
            android:layout_below="@+id/date_param"
            android:layout_marginTop="15dp"
            android:layout_width="match_parent"
            android:layout_marginBottom="7dp"
            android:layout_height="wrap_content"/>

        <android.support.v4.view.ViewPager
            android:id="@+id/tabbed_content"
            android:layout_above="@+id/btn_item"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tab_indicator"
            android:layout_marginTop="10dp"/>

        <example.ui.BigButton
            android:id="@+id/btn_item"
            android:text="@string/btn_convert_rates"
            style="@style/BigButton"
            android:layout_marginTop="10dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="25dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </RelativeLayout>
</view> 

因此,在面板视图中:在顶部绘图日期,在字符串下:text1和text2在一行上,在某些内容下,在 - 按钮下。 我在画布上绘制text1和text2。我需要点击Espresso的text1和text2。但是,如果我写:onView(withText(String.valueOf(R.string.text1))).perform(click()); - 我有android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with text: is "2131492993",所以,我想点击坐标x,y:

    private static ViewAction clickXY(final int x, final int y) {
        return new GeneralClickAction(
                Tap.SINGLE,
                new CoordinatesProvider() {
                    @Override
                    public float[] calculateCoordinates(View view) {

                        final int[] screenPos = new int[2];
                        view.getLocationOnScreen(screenPos);

                        final float screenX = screenPos[0] + x;
                        final float screenY = screenPos[1] + y;
                        float[] coordinates = {screenX, screenY};

                        return coordinates;
                    }
                },
                Press.FINGER);
    }
}

但是,我不知道 - 必须是x,y?如何获得test1的x,y和test2的x,y?

2 个答案:

答案 0 :(得分:0)

您不需要在此处单击x,y坐标。 这在屏幕尺寸上不会很好。

问题是这段代码:

String.valueOf(R.string.text1)

R.string.text1是一个在构建时生成的整数,您将其转换为字符串,因此它正在查找一些显示&#34; 2131492993&#34;。

的视图

我假设您正在尝试从资源文件中查找字符串值。

你想要这样的东西:

onView(withText(getInstrumentation().getTargetContext().getString(R.string.text1))).perform(click());

甚至:

onView(withText("My Button Text")).perform(click());

答案 1 :(得分:0)

考虑使用

onView(withText(R.string.text1)).perform(click());

请注意区别 - 我没有使用String.valueOf(R.string.text1)。这给你字符串&#34; 2131492993&#34;相反,它会创建一个Matcher,在内部查找资源文件中与2131492993关联的字符串,然后查找包含该文本的视图。