Java 浓缩咖啡点击特定文字

Java 浓缩咖啡点击特定文字,java,android-espresso,ui-testing,Java,Android Espresso,Ui Testing,在我的浓缩咖啡测试中,我想用idSwitchTextView点击文本元素的某个部分。全文为“您是会员吗?使用电子邮件登录” 当您单击“使用电子邮件登录”时,它会切换页面视图 当我使用onView(带id(R.id.switchTextView)).perform(click())测试通过,但是因为在我想要点击的文本之前有初始文本,所以它不会改变视图。我如何才能锁定点并只触摸“使用电子邮件登录”文本?您可以这样做 onView(withId(R.id.switchTextView(matches(

在我的浓缩咖啡测试中,我想用id
SwitchTextView
点击文本元素的某个部分。全文为“您是会员吗?使用电子邮件登录” 当您单击“使用电子邮件登录”时,它会切换页面视图

当我使用onView(带id(R.id.switchTextView)).perform(click())测试通过,但是因为在我想要点击的文本之前有初始文本,所以它不会改变视图。我如何才能锁定点并只触摸“使用电子邮件登录”文本?

您可以这样做

onView(withId(R.id.switchTextView(matches(withText(containsString("Login with email"))));

我找到的唯一方法就是找到按下的地方,然后告诉意式浓缩咖啡在那里按下。看起来真的很难,但实际上我第一次试了3次就选对了位置。这比听起来容易多了

我就是这样做的:

onView(withId(R.id.switchTextView)).perform(clickPercent(0.4F, 0.4F))
原因是我的文本略位于视图的左上角。在本例中,我建议使用0.5F、0.8F之类的值,因为我认为这是需要单击的标签的正确部分

为此,我使用了
clickPercent
。一种方法

我复制我的Kotlin版本,以防有人发现它有用

fun clickPercent(pctX: Float, pctY: Float): ViewAction {
    return GeneralClickAction(
            Tap.SINGLE,
            CoordinatesProvider { view ->
                val screenPos = IntArray(2)
                view.getLocationOnScreen(screenPos)
                val w = view.width
                val h = view.height

                val x = w * pctX
                val y = h * pctY

                val screenX = screenPos[0] + x
                val screenY = screenPos[1] + y

                floatArrayOf(screenX, screenY)
            },
            Press.FINGER,
            InputDevice.SOURCE_MOUSE,
            MotionEvent.BUTTON_PRIMARY)
}