我正在我的应用程序中实现自定义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()))
}
和来自this post
的click 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内部的屏幕底部):
有人知道为什么吗?任何帮助表示赞赏。
答案 0 :(得分:0)
在确定灵活的解决方案后回答我自己的问题:
DisplayMetrics
的{{1}}并减去任意数字以尝试命中View
所以我再试一次,
Keyboard.Key
上使用check
方法来检查 ViewMatcher
。
KeyBoardView
的位置x KeyboardView
的宽度和高度数学:
KeyboardView
的widthPercent(在我的情况下为33.3%)足够多的解释,下面是代码:
Keyboard.Key
以及所有数学方法的辅助方法:
@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()))
}
现在,单击并没有完全居中,但它单击的按钮非常靠近中心。
我希望这对其他人有帮助!祝您好运,编码愉快!