点击边界/坐标
我知道Espresso可以通过UiAutomator的方式点击 。 (x和y坐标)我已经通过文档阅读,但我似乎无法find它。 任何帮助表示赞赏。 谢谢
编辑
我发现这个链接 ,但没有例子如何使用它,我主要关心的是UiController
是或如何使用它。
Espresso具有GeneralClickAction
,这是ViewActions click()
, doubleClick()
和longClick()
的底层实现。
GeneralClickAction
的构造函数将CoordinatesProvider
作为第二个参数。 所以基本的想法是创建一个静态的ViewAction
getter,它提供了一个自定义的CoordinatesProvider
。 像这样的东西:
public 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); }
一般意见与Espresso:而不是寻找文件(几乎没有),看看源代码。 Espresso是开源的,源代码本身的质量非常好。
@ haffax的答案很好,效果很好。
但是,如果您想单击某个视图的某个部分,可能会在屏幕之间发生变化,则基于百分比(或比率)进行单击可能会非常有用,因为即使dp数字在所有屏幕上都可能不稳定。 所以,我做了一个简单的修改:
public static ViewAction clickPercent(final float pctX, final float pctY){ return new GeneralClickAction( Tap.SINGLE, new CoordinatesProvider() { @Override public float[] calculateCoordinates(View view) { final int[] screenPos = new int[2]; view.getLocationOnScreen(screenPos); int w = view.getWidth(); int h = view.getHeight(); float x = w * pctX; float y = h * pctY; final float screenX = screenPos[0] + x; final float screenY = screenPos[1] + y; float[] coordinates = {screenX, screenY}; return coordinates; } }, Press.FINGER); }
我以为我会在这里分享,让别人可以受益。
虽然该方法已被弃用,但有效的答案对我有帮助。 现在你必须指定inputDevice
(例如InputDevice.SOURCE_MOUSE
)和buttonState
(例如MotionEvent.BUTTON_PRIMARY
Kotlin示例:
companion object { fun clickIn(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, InputDevice.SOURCE_MOUSE, MotionEvent.BUTTON_PRIMARY) } }
- Kotlin的建筑师
- Android Databinding:在方法参数中使用三元运算符时发生ConcurrentModificationException
- Android测试失败时,Gradle构建失败,“字符串索引超出范围”
- 用Android Studio 3.0 Canary 4构建错误
- Kotlin – 属性必须被初始化或者是抽象的,即使有一个init()函数
- 如何在Android Studio中使用Kotlin在RecyclerView上添加Onclick监听器?
- 如何正确显示Google房间使用的异步任务的进度
- 我们如何从Kotlin的MutableList中移除元素
- 初始化后属性被擦除 – kotlin