【问题标题】:Espresso click on specific words of textEspresso 点击文本的特定单词
【发布时间】:2017-02-22 11:58:28
【问题描述】:

在我的 espresso 测试中,我想点击带有 idSwitchTextView 的文本元素的某个部分。全文为“你是会员吗?用邮箱登录” 当您单击使用电子邮件登录时,它会切换页面视图。

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

【问题讨论】:

    标签: java android-espresso ui-testing


    【解决方案1】:

    我找到的唯一方法是找到按下的位置并告诉 Espresso 按下该位置。看起来真的很难,但实际上我第一次尝试 3 次就选对了位置。这比听起来要容易。

    我只是这样做了:

    onView(withId(R.id.switchTextView)).perform(clickPercent(0.4F, 0.4F))
    

    原因是我的文字稍微位于视图的左上角。在这种情况下,我建议使用 0.5F、0.8F 之类的值,因为我认为这是需要单击的标签的右侧部分。

    为此,我使用了clickPercent。一个方法copyed by this anwser

    我复制我的 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)
    }
    

    【讨论】:

      【解决方案2】:

      你可以这样做

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

      【讨论】:

      • 有人能编译吗???
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多