带有自定义键盘视图按钮的浓缩咖啡

机器人

我正在我的应用程序中实现一个自定义的 KeyboardView 并且目前一切正常,但是,当我尝试使用 Espresso ViewAction 在键盘上按下一个键时,我收到一个异常消息:

android.support.test.espresso.PerformException: 
Error performing 'single click - At Coordinates: 1070, 2809 and 
precision: 16, 16' on view 'with id: 
com.example.app.mvpdemo:id/keyboardLayout'.

抛出异常的代码是:

@Test
fun enter100AsPriceShouldDisplay120ForA20PercentTip(){
    onView(withId(R.id.editTextCheckAmount))
            .perform(typeText("100"), closeSoftKeyboard())
    val appContext = InstrumentationRegistry.getTargetContext()
    val displayMetrics = appContext.resources.displayMetrics
    onView(withId(R.id.keyboardLayout)).perform(clickXY(displayMetrics.widthPixels - 10, displayMetrics.heightPixels - 10))
    onView(withText("$120.00")).check(matches(isDisplayed()))
}

以及来自这篇文章的点击 XY 功能

 private fun clickXY(x: Int, y: Int): ViewAction {
    return GeneralClickAction(
            Tap.SINGLE,
            CoordinatesProvider { view ->
                val screenPos = IntArray(2)
                view.getLocationOnScreen(screenPos)

                val screenX = (screenPos[0] + x).toFloat()
                val screenY = (screenPos[1] + y).toFloat()

                floatArrayOf(screenX, screenY)
            },
            Press.FINGER, 0, 0)
}

这是我的键盘布局(固定在 ConstraintLayout 内的屏幕底部):

在此处输入图片说明

有谁知道为什么?任何帮助表示赞赏。

机器人

在确定一个灵活的解决方案后回答我自己的问题:

  1. 第一次尝试 - 获取DisplayMetricsView并减去任意数字以尝试击中Keyboard.Key
    • 这不起作用,因为 clickXY 函数使用视图的位置
    • 这最终成为异常的原因,因为视图小于 DisplayMetrics 值,并且添加到屏幕位置上的视图将为 x 和 y 提供非常高的数字。

于是我又试了一次

  1. 第二次尝试-利用check上方法ViewMatcher检查KeyBoardView
    • 通过这样做,我能够访问KeyboardView的位置 x
    • 然后我能够得到KeyboardView的宽度和高度
    • 通过进行一些数学运算,我能够找出 x & y 的目标索引

数学:

  • 取宽度百分比Keyboard.Key(在我的情况下为 33.3%)
  • 取keyboard.xml的rowCount(在我的情况下为3)
  • 使用 (viewWidth * widthPercent) / 4 得到 relativeButtonX
  • 使用 (viewHeight / rowCount) / 2 获取 relativeButtonY
  • 然后对于 targetY,我采用了 viewHeight - relativeButtonY
  • 最后,对于 targetX,我采用了 (viewPosX + viewWidth) - relativeButtonX

解释够了,下面是代码:

@Test
fun enter100AsPriceShouldDisplay120ForA20PercentTip() {
    onView(withId(R.id.editTextCheckAmount))
            .perform(typeText("100"), closeSoftKeyboard())

    // call the function to get the targets
    val (viewTargetY, viewTargetX) = getTargetXAndY()

    // perform the action
    onView(withId(R.id.keyboardLayout)).perform(clickXY(viewTargetX.toInt(), viewTargetY))
    onView(withText("Tip: $20.00")).check(matches(isDisplayed()))
    onView(withText("Total: $120.00")).check(matches(isDisplayed()))
}

以及包含所有数学知识的辅助方法:

private fun getTargetXAndY(): Pair<Int, Double> {
    var viewHeight = 0
    var viewWidth = 0
    var viewPosX = 0F
    val viewMatcher = onView(withId(R.id.keyboardLayout))
    viewMatcher.check { view, _ ->
        viewWidth = view.width
        viewHeight = view.height
        viewPosX = view.x
    }

    val keyboardKeyWidthPercent = 0.333
    val keyboardRowsCount = 3

    val keyboardButtonWidthQuarter = (viewWidth * keyboardKeyWidthPercent) / 4
    val keyboardButtonHeightHalf = (viewHeight / keyboardRowsCount) / 2

    val viewTargetY = viewHeight - keyboardButtonHeightHalf
    val viewTargetX = (viewPosX + viewWidth) - keyboardButtonWidthQuarter
    return Pair(viewTargetY, viewTargetX)
}

现在,点击不是完全居中,但它点击了非常靠近中心的按钮。

我希望这对其他人有帮助!祝你好运,快乐编码!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有自定义Toast的NoMatchingRootException意式浓缩咖啡

来自分类Dev

带有子项的自定义视图(按钮,编辑文本等)

来自分类Dev

带有自定义按钮的android自定义操作栏视图

来自分类Dev

如何在 UIAlert 出现时显示键盘,其中带有自定义 UITextLabel 视图的 UIAlert

来自分类Dev

iOS 8:带有撤消和重做按钮的自定义键盘

来自分类Dev

单击带有浓缩咖啡的主页图标

来自分类Dev

带有自定义键盘的UI Automator。找到确切的键盘按钮,然后单击它

来自分类Dev

如何使用按钮操作(带有参数)从自定义UITableViewCell推送视图

来自分类Dev

创建一个android自定义视图:一行带有按钮的行

来自分类Dev

带有按钮 Onclick 的自定义形状回收器视图

来自分类Dev

具有collectionviews的Swift慢速自定义键盘按钮

来自分类Dev

WinCE中带有韩文IME的自定义键盘

来自分类Dev

带有键盘导航功能的jQuery自定义库

来自分类Dev

带有快速搜索框的自定义键盘工具

来自分类Dev

带有弹出表情符号的自定义键盘

来自分类Dev

带有分割视图的自定义相机视图

来自分类Dev

带有自定义文本视图的自定义视图

来自分类Dev

Android中的自定义键盘视图

来自分类Dev

具有带有Spinner的自定义列表项的自定义列表视图

来自分类Dev

具有按钮单击事件的自定义列表视图

来自分类Dev

自定义适配器视图(带有图片)

来自分类Dev

带有自定义视图的Crouton:未调用onClickListener

来自分类Dev

带有自定义节标题的iOS的UITable视图

来自分类Dev

顶部带有自定义视图的SupportMapFragment

来自分类Dev

带有自定义视图的 ListView 截图越界

来自分类Dev

带有UploadiFive插件的自定义按钮

来自分类Dev

带有cocoalibspotify的自定义Airplay按钮

来自分类Dev

带有图像的自定义后退按钮

来自分类Dev

带有自定义主题的错误的窗口按钮颜色

Related 相关文章

  1. 1

    带有自定义Toast的NoMatchingRootException意式浓缩咖啡

  2. 2

    带有子项的自定义视图(按钮,编辑文本等)

  3. 3

    带有自定义按钮的android自定义操作栏视图

  4. 4

    如何在 UIAlert 出现时显示键盘,其中带有自定义 UITextLabel 视图的 UIAlert

  5. 5

    iOS 8:带有撤消和重做按钮的自定义键盘

  6. 6

    单击带有浓缩咖啡的主页图标

  7. 7

    带有自定义键盘的UI Automator。找到确切的键盘按钮,然后单击它

  8. 8

    如何使用按钮操作(带有参数)从自定义UITableViewCell推送视图

  9. 9

    创建一个android自定义视图:一行带有按钮的行

  10. 10

    带有按钮 Onclick 的自定义形状回收器视图

  11. 11

    具有collectionviews的Swift慢速自定义键盘按钮

  12. 12

    WinCE中带有韩文IME的自定义键盘

  13. 13

    带有键盘导航功能的jQuery自定义库

  14. 14

    带有快速搜索框的自定义键盘工具

  15. 15

    带有弹出表情符号的自定义键盘

  16. 16

    带有分割视图的自定义相机视图

  17. 17

    带有自定义文本视图的自定义视图

  18. 18

    Android中的自定义键盘视图

  19. 19

    具有带有Spinner的自定义列表项的自定义列表视图

  20. 20

    具有按钮单击事件的自定义列表视图

  21. 21

    自定义适配器视图(带有图片)

  22. 22

    带有自定义视图的Crouton:未调用onClickListener

  23. 23

    带有自定义节标题的iOS的UITable视图

  24. 24

    顶部带有自定义视图的SupportMapFragment

  25. 25

    带有自定义视图的 ListView 截图越界

  26. 26

    带有UploadiFive插件的自定义按钮

  27. 27

    带有cocoalibspotify的自定义Airplay按钮

  28. 28

    带有图像的自定义后退按钮

  29. 29

    带有自定义主题的错误的窗口按钮颜色

热门标签

归档