1

我正在探索 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 环境中的错误。想法?

4

1 回答 1

4

这里有 2 个错误。一个在 MonkeyRunner 中,另一个在您的代码中。我在 Nexus S 上进行测试,屏幕尺寸为 480x800。Driod 非常接近我这样检查的尺寸:

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

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

当您向右拖动时,您的第一个片段不在屏幕上,这是框架不喜欢的。由于它在屏幕外获得了“向下”事件,因此它会丢弃完成拖动的所有移动事件。

像这样拖动应该可以:

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

于 2011-03-08T01:05:23.200 回答