Android monkeyrunner - 检查屏幕是否包含图像或特定颜色

时间:2014-03-24 11:12:11

标签: android image-processing adb monkeyrunner genymotion

我有一个Android应用程序,我想自动化/压力测试。 我在SCAR Divi中制作了基于图像的自动化脚本 并针对我在Bluestacks上安装的应用程序运行它。 我想把它改成Genymotion,因为Bluestacks太慢了。

我已经设置了环境 (genymotion +图像与我的应用程序+ adb安装和工作)。 我在python中重写了我的脚本并在MonkeyRunner中使用它,但是......

除了发送手势,点击和等待, 我错过了图像识别功能。 我发现我可以将2个屏幕截图与ImageMagic进行比较,但这不是我需要的。

我需要检查某个按钮,或者至少是否是屏幕上的特定颜色。 任何人都可以指出我正确的方向吗?

我真的很感激一些例子:(

2 个答案:

答案 0 :(得分:5)

MonkeyRunner 确实提供了相当不错的基于图像的测试方法。我将在下方向您展示如何从当前显示的设备屏幕中获取子图像。然后,您可以保存此子图像和/或与参考图像

进行比较

首先,您需要截取设备当前屏幕的屏幕截图

# Take a screenshot
image = device.takeSnapshot()

然后你可以拍一张子图像。例如,该子图像可以是某个屏幕上的按钮,以验证该屏幕上是否存在该按钮。为此,您可以使用以下方法。下面的元组(0,0,50,100)只是一个例子。你应该提供自己的。基本上它是所需子图像的(x,y,w,h)。

# Take the sub-image
sub_image = image.getSubImage((0, 0, 50, 100))

在该步骤之后,您可以保存图像和/或与参考图像进行比较。要与参考图像进行比较,您可以执行以下操作:

# Load the reference image for comparison
reference = MonkeyImage.loadFromFile(PATH_TO_REFERENCE_IMAGE)

if not sub_image.sameAs(reference, 0.9):
       print "Images do not match!"
       # do something

0.9是接受程度。如果两个图像匹配90%或更高,则将被视为已通过

希望这会有所帮助。如果您遇到任何问题,请告诉我!

答案 1 :(得分:0)

AndroidViewClient可让您获取整个屏幕或特定视图的屏幕截图。这些屏幕截图通常使用

写入文件
View.writeImageToFile(self, filename, format="PNG")

但是,如果您有兴趣获取原始图像对象,PIL Image(参见http://www.pythonware.com/products/pil/),则可以

image = device.takeSnapshot()

然后使用库中的可用methods and tools根据您的需要进行操作或分析。