Monkeyrunner“拖动”命令使用不正确的坐标?这是一个错误吗?

时间:2011-02-25 01:10:05

标签: android drag monkeyrunner

我正在探索Monkeyrunner脚本环境,测试各种事件以确保我能够充分模拟我的应用程序。具体来说,我对“拖动”功能中使用的坐标有疑问。

连接Monkeyrunner但没有应用程序运行(即只是坐在主屏幕上),输入以下命令将模仿左右“滑动”事件,向左移动一个主屏幕。

device.drag((100,400),(500,400),0.15,5)

这很好用。

这个命令,然后应该产生相反方向的滑动......

device.drag((500,400),(100,400),0.15,5)

......但事实并非如此。

但这样做:

device.drag((400,400),(100,400),0.15,5)

为了进一步测试,我下载了"MagicMarker"个应用。通过这种方式,我可以准确地看到这些不同触摸事件发生的位置显然它不会让我截取屏幕截图,除非我使用自己的应用程序,所以我只需要描述我在这里看到的内容。希望您可以验证这一点或告诉我我缺少的步骤。

这个命令......

device.drag((100,400),(500,400),0.15,5)

...在屏幕中间从左到右绘制一条水平线。它完全集中在我的摩托罗拉Droid的屏幕上。两个端点都清晰可见,两端都有边距。

这个命令......

device.drag((500,400),(100,400),0.15,5)

...应该是在相反方向(从右到左)绘制的同一条线,向右绘制线偏移100px。第一个端点位于屏幕边缘或完全位于屏幕外。我说不出来。

让我感到困惑的是坐标看起来并不一致。点(500,400)位于屏幕的垂直中心,如果在左右拖动移动中用作端点,则向右移动一点,但如果用作左右移动的起点,则看起来完全是屏幕外的拖动。

感觉这可能是Monkeyrunner环境中的一个错误。想法?

1 个答案:

答案 0 :(得分:4)

这里有2个漏洞。一个在MonkeyRunner中,另一个在你的代码中。我在Nexus S上测试,屏幕尺寸为480x800。驱动器非常接近那个尺寸我检查了这样:

print device.getProperty('display.width'), device.getProperty('display.height')

因此,当您向右拖动时,您的最后一段(x = 500)不在屏幕边缘。当框架在拖动结束时获得“up”事件时,它似乎恢复正常。

当您向右拖动时,您的第一个片段不在屏幕上,而框架不喜欢。由于它在屏幕外显示“向下”事件,因此会删除完成拖动的所有移动事件。

这样做这样的拖拽应该有效:

device.drag((100,400),(400,400),0.15,5)
time.sleep(0.5)
device.drag((400,400),(100,400),0.15,5)

MonkeyRunner中的错误是它删除了拖动命令的最后一部分。所以看起来它正在完成屏幕上的阻力,但实际上并非如此。对此的解决方法如下:https://review.source.android.com/21635